В 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
}
Fine. Но почему тогда то же самое не относится к функциям? например:.
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
, как я должен был бы сделать в первом примере; это просто кажется непоследовательным. Я уверен, что для этого есть веская причина; может ли кто-нибудь просветить меня?
Причина, о которой я прошу, заключается главным образом в том, что я хотел бы сократить некоторые из моих довольно длинных типов функций таким образом, но я хочу убедиться, что это ожидаемо и приемлемо для этого:)