Когда я определяю настраиваемый тип, кажется, что тип базового типа имеет значение, могу ли я передать его функции, которая есть или мне нужно ее преобразовать.
Вопрос: почему работают RuneFunc и StringMap, но не Integer?
https://play.golang.org/p/buKNkrg5y-
package main
type RuneFunc func(rune) rune
type Integer int
type StringMap map[string]string
func main() {
//m := make(StringMap)
//mf(m)
var i Integer = 5
nf(i)
//var f func(rune) rune
//ff(f)
}
func mf(i map[string]string) {
}
func ff(i func(rune)rune) {
}
func nf(i int) {
}
Здесь, когда я запускаю эту функцию под названием nf с Integer, она жалуется, хотя int является базовым типом. Но когда я вызываю mf или ff, они выполняются успешно.
Go имеет строгую систему типов. Просто потому, что ваш тип является просто псевдонимом для int, не означает, что вы можете свободно их обменивать, вам все равно придется преобразовывать тип. Ниже приведена рабочая версия вашего основного, вот код на игровой площадке: https://play.golang.org/p/BDTXnnG9Lg