map
значения по умолчанию равны нулю, если вы не инициализируете их с помощью make
. Таким образом, чтобы сэкономить некоторый шаблон, создайте «конструктор» для любого типа, у которого есть карта, чтобы выполнить эту инициализацию для вас, например:
func newUser() User {
return User{
Inbox: make(map[string]Email),
Outbox: make(map[string]Email),
}
}
Для использования:
u := newUser()
u.Inbox["gmail#56"] = Email{
From: "me",
To: "you",
Body: "how are you?",
}
u.Outbox["outlook#25"] = Email{
From: "Mr. Smith",
To: "Bossman",
Body: "report is done?",
}
Пример игровой площадки: https://play.golang.org/p/3LLurNsDJER
Вы также можете инициализировать карты встроенными картами, но синтаксис довольно утомителен:
u := User{
Inbox: map[string]Email{"gmail": Email{From: "me", To: "you", Body: "how are you?"}},
Outbox: map[string]Email{"outlook": Email{From: "Mr. Smith", To: "Bossman", Body: "report is done?"}},
}