Почему я должен передать тип, чтобы сделать функцию, когда переменная уже объявлена? - PullRequest
0 голосов
/ 10 июля 2019

Я хочу использовать анонимную структуру, чтобы сделать что-то.

var users []struct{
    Name string `json:"name,omitempty"`
    Age int
}

, и мне нужно снова написать тип, чтобы установить значение

users = make([]struct{
    Name string `json:"name,omitempty"`
    Age int
}, 0, 10)

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

(если нет, мне интересно, почему дизайн golang делает такую ​​функцию ...)

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Анонимные структуры удобны для одноразового использования.

Если вы используете его более одного раза, определите именованный тип структуры.

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

func myfunc() {
    type MyType struct {
        Name string
    }
    m := MyType{Name: "Hello, World!"} // this type can only be used within this func
    fmt.Println(m)
}
0 голосов
/ 10 июля 2019

Если я настаиваю на использовании анонимной структуры, есть ли способ сделать ее более приличной?

Да, есть.Используйте :=:

users := make([]struct{
    Name string `json:"name,omitempty"`
    Age int
}, 0, 10)

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

Но не бойтесь называть ваши типы.В общем, в любом случае это лучший подход (с := или без него).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...