我有这个代码:
type Iterable[T any] struct {
Val T
End T
Next func() (bool, T)
}
func acceptStructWithNext[T any](r struct{ Next func() (bool, T) }) {
fmt.Println(r)
}
func main() {
iterable := Iterable[int]{
Val: 0,
End: 100,
Next: func() (bool, int) {
return true, 0
},
}
acceptStructWithNext[int](iterable) // error is here
}
字符串
我得到这个编译错误:
无法将“iterable”(类型Iterable[int])用作类型结构{...}
我以为结构类型应该允许这种类型的事情-我错在哪里?
2条答案
按热度按时间yv5phkfx1#
我认为结构化类型应该允许这种类型的东西[...]
是的,但是Go * 没有 *“结构类型”。在某种程度上,结构类型的好处可以通过接口的隐式满足规则来实现。但是这只适用于 * 接口 *。
请参阅https://go.dev/doc/faq#implements_interface
[...]我哪里做错了?
通过假设Go会像教科书一样对结构类型进行结构类型化。
bzzcjhmw2#
struct {Val int; End int; Next func() (bool, int)}
和struct{ Next func() (bool, int) }
是不同的类型。第一个有瓦尔和End字段。第二个没有。