在Go中,如果您定义新类型,例如:
type MyInt int
然后,您不能将a传递给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
为type MyFunc
。看起来似乎不一致。我敢肯定有充分的理由。谁能启发我?
我问的原因主要是因为我想以这种方式缩短一些相当长的函数类型,但是我想确保这样做是可以预期的并且可以接受的:)
现在开始实际具有类型别名github.com/golang/go/issues/18130
—
Hut8'8
有人可以解释第二个代码段吗?我真的无法获得这些函数的声明
—
DevX
type
在Go中比Scala更有用。Scala 只有类型别名,,。