Как добавить на карту, кто имеет тип другой структуры? - PullRequest
0 голосов
/ 12 марта 2020
type Email struct { 

    From string
    To string
    Body string

}

type User struct {

    Inbox map[string]Email
    Outbox map[string]Email

}

Как добавить значение в пользовательскую карту / инициализировать ?? Я в замешательстве, я могу добавить карту пользователя, если она не была типа Email, но это очень запутанно.

1 Ответ

1 голос
/ 12 марта 2020

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?"}},
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...