Объявление анонимного типа работает по-разному через "var" vs ": =" - PullRequest
0 голосов
/ 25 февраля 2019

Объявляя переменную с анонимным типом в Go, я вижу, что синтаксис var v против v:= работает по-разному.Представьте, что мы объявляем пустой экземпляр анонимного типа структуры и присваиваем его переменной.

Это работает:

func main() {
    var  v struct {}
    _ = v

Но это не так:

func main() {
    t := struct{}
    _ = t
}

компиляция этого дает следующую ошибку (https://play.golang.org/p/MgbttbBVmYE):

prog.go:8:7: type struct {} is not an expression

Почему это так?

1 Ответ

0 голосов
/ 25 февраля 2019

var v struct{} дает v тип struct{}, но явно не устанавливает значение, поэтому получает нулевое значение {}.

t := struct{} не является полным выражением.Вам потребуется t := struct{}{} для создания t с типом struct {} и присвоения ему значения {}.

Другими словами, struct{} является типом, но создает t с помощью := нужно значение, а не просто тип с правой стороны.struct{}{} это то, как вы пишете буквальную форму анонимной пустой структуры.

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