【发布时间】:2018-02-13 09:05:12
【问题描述】:
package main
type gens func(args...interface{}) int
func sum1(a int,b int,c int) int {
return a+b+c
}
func sum2(a...interface{}) int {
ret := 0
for _,v := range a {
ret = ret + v.(int)
}
return ret
}
func main() {
var a gens
//a = sum1
a = sum2
println(a(1,2,3))
}
考虑上面的代码,sum2 可以工作,但 sum1 不能。
编译器说“不能在赋值中使用 sum1 (type func(int, int, int) int) 作为类型 gens”
我问的原因是因为我想编写一个接受变量参数函数的 goroutine 调度程序,除了将许多其他 func 参数重写为“args...interface{}”,我该怎么做
谢谢!
【问题讨论】:
-
你不能。解释和解决方法见golang.org/doc/faq#convert_slice_of_interface。
-
感谢您的回复! @Volker
-
首先,您可以清楚地看到您正在代码中传递接口片段。您应该传递接口并获取可以是切片的底层类型。因此,在
sum1中,您实际上传递的是 int 类型参数,这些参数无法使用接口切片进行包装。