Анонимная структура работает с именем [duplicate]

Когда я определяю настраиваемый тип, кажется, что тип базового типа имеет значение, могу ли я передать его функции, которая есть или мне нужно ее преобразовать.

Вопрос: почему работают 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, они выполняются успешно.

7
задан 6 January 2017 в 12:45

1 ответ

Go имеет строгую систему типов. Просто потому, что ваш тип является просто псевдонимом для int, не означает, что вы можете свободно их обменивать, вам все равно придется преобразовывать тип. Ниже приведена рабочая версия вашего основного, вот код на игровой площадке: https://play.golang.org/p/BDTXnnG9Lg

2
ответ дан 15 August 2018 в 15:42
  • 1
    Но почему это не требует преобразования типа для строки [string] string или func (rune)? Вот в чем вопрос – HorusCoding 6 January 2017 в 12:30
  • 2
    Упомянутый, как принятый очень продуманный ответ @icza, так как я также не получил расширенный фокус вопроса сразу и до выяснения, и потому, что мне нравится ваше положение кода на игровой площадке в сочетании с кратким объяснением Integer vs. int разница. – Dilettant 6 January 2017 в 15:35

Другие вопросы по тегам:

Похожие вопросы: