Goで、新しいタイプを定義する場合:
type MyInt int
その後MyInt
、intを期待する関数にa を渡すことはできません。逆も同様です。
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
にキャストする必要がなくなるため、不満はありません。一貫性がないようです。それには十分な理由があると私は確信しています。誰かが私を啓発できますか?
私が尋ねる理由は主に、私のように長い関数型のいくつかをこのように短縮したいからですが、これを行うことが期待され、受け入れられることを確認したいと思います:)
type
GoではScalaよりもかなり便利です。Scalaには型エイリアスしかありません。