package main
type SomeMethod interface {
Get() string
}
type Method struct {
Data string
}
func (m *Method) Get() string {
return m.Data
}
func main() {
var (
sli []*Method
)
m := &Method{}
sli = append(sli, m)
BatchGet(sli...) // 不支持
BatchGet(sli[0], sli[1]) // 支持
}
func BatchGet(ms ...SomeMethod) {
for _, v := range ms {
v.Get()
}
}
在我理解 sli... 应该跟[]slice是不同数据结构吧
为什么两种BatchGet的调用 第一种会不支持呢?
可变参数在golang中传递给函数后,函数会构建一个切片用来储存传递的参数,例如:
假设你传入了一个已有的切片到某可变参数函数:
假设这个函数在内部改变了可变参数的第一个元素,譬如这样:
很明显,你的代码中 []*Method 跟 []SomeMethod不是一个类型,所以不支持你这种写法。
可以参考下这篇文章: https://studygolang.com/artic...