假设我有一个名为foo
的通用struct
:
type foo[T any] struct {
data T
}
我有一个变量函数,我想传递给它一些foo
.它们可能是任何类型的foo
.我的理解是,因为foo[int]
不同于foo[string]
,所以我需要将省略号定义为any
类型,如下所示:
func bar(things ...any) {
for _, v := range things {
fmt.Println(v)
}
}
这确实奏效了.
func main() {
a := foo[string]{"cheese"}
b := foo[int]{42}
bar(a, b)
}
我的问题是,我想专门访问每个foo
中的data
字段.但如果我这样定义bar
,
func bar(things ...any) {
for _, v := range things {
fmt.Println(v.data)
}
}
编译器感到不安是可以理解的,因为things
可能是anything,因此不能保证他们有字段data
.
会有一个名为data
的字段,因为我总是会通过foo
,但我不能指定我只会通过foo
,就像这样,
func bar(things ...foo) {
for _, v := range things {
fmt.Println(v.data)
}
}
因为没有指定foo
的类型.
如何将未指定数量的foo
传递给bar
,然后访问data
字段?