在下面的例子中,我试图定义一个PreciseAdder类型,它可以简化示例化泛型类型的使用。不幸的是,go编译器似乎认为泛型类型上定义的方法不适用于PreciseAdder类型。我知道我可以通过组合解决这个问题,但是有没有一种方法可以让它与类型定义一起工作,如果没有,原因是什么?
package main
type Addable interface {
Add()
}
type Adder[T Addable] struct{}
func (a Adder[T]) DoAdd(){}
type PreciseAddable struct{}
func (p PreciseAddable)Add(){}
type PreciseAdder Adder[PreciseAddable]
func main() {
var p PreciseAdder
p.DoAdd()
}
字符串
1条答案
按热度按时间kq0g1dla1#
这一点:
字符串
是一个类型声明,更确切地说是一个 * 类型定义 *。它创建一个新的类型,所有方法都被剥离。
相反,使用一个 type alias 来保留所有方法,它只是引入了一个新的标识符来引用相同的类型:
型
(Note标识符和类型之间的
=
符号)。