Go で新しい型を定義すると、次のようになります。
type MyInt int
次に、int を期待する関数にa を渡すことはできませんMyInt
。その逆も同様です。
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
矛盾しているようです。それには十分な理由があると確信しています。誰かが私を啓発できますか?
私が尋ねる理由は主に、かなり長い関数型のいくつかをこのように短縮したいからですが、これを行うことが期待され、受け入れられることを確認したいのです:)