最佳答案
在 Go 中,如果你定义了一个新的类型,例如:
type MyInt int
然后不能将 MyInt
传递给期望使用 int 的函数,反之亦然:
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
好吧,但是为什么这个不适用于函数呢? 例如:
type MyFunc func(i int)
func (m MyFunc) Run(i int) {
m(i)
}
func run(f MyFunc, i int) {
f.Run(i)
}
func main() {
var newfunc func(int) //explicit declaration
newfunc = func(i int) {
fmt.Println(i)
}
run(newfunc, 10) //works just fine, even though types seem to differ
}
现在,我没有抱怨,因为它省去了我必须显式地将 newfunc
强制转换为 MyFunc
类型,就像我在第一个示例中必须做的那样; 它只是看起来不一致。我肯定这是有原因的,有人能给我解释一下吗?
我之所以这样问,主要是因为我想用这种方式缩短一些相当长的函数类型,但是我想确保这样做是可以预期和接受的:)