Подтвердить что ты не робот

Инициализировать определение вложенной структуры в Голанге

Как вы инициализируете следующую структуру?

type Sender struct {
    BankCode string
    Name     string
    Contact  struct {
        Name    string
        Phone   string
    }
}

Я пробовал:

s := &Sender{
        BankCode: "BC",
        Name:     "NAME",
        Contact {
            Name: "NAME",
            Phone: "PHONE",
        },
    }

Не работает:

mixture of field:value and value initializers
undefined: Contact

Я пробовал:

s := &Sender{
        BankCode: "BC",
        Name:     "NAME",
        Contact: Contact {
            Name: "NAME",
            Phone: "PHONE",
        },
    }

Не работает:

undefined: Contact
4b9b3361

Ответ 1

Ваш Contact - это поле с анонимным типом структуры. Таким образом, вам нужно повторить определение типа:

s := &Sender{
    BankCode: "BC",
    Name:     "NAME",
    Contact: struct {
        Name  string
        Phone string
    }{
        Name:  "NAME",
        Phone: "PHONE",
    },
}

Но в большинстве случаев лучше определить отдельный тип, предложенный rob74.

Ответ 2

Как насчет определения двух структур отдельно, а затем вложения "Контакт" в "Отправитель"?

type Sender struct {
    BankCode string
    Name     string
    Contact
}

type Contact struct {
    Name  string
    Phone string
}

если вы это сделаете, ваша вторая попытка инициализации будет работать. Кроме того, вы можете использовать "Контакт" самостоятельно.

Если вы действительно хотите использовать вложенную структуру, вы можете использовать ответ Ainar-G, но эта версия не очень хороша (и она становится еще более уродливой, если структуры глубоко вложены, как показано здесь), поэтому я бы этого не сделал, если его можно избежать.

Ответ 3

type NameType struct {
    First string
    Last  string
}
type UserType struct {
    NameType
    Username string
}

user := UserType{NameType{"Eduardo", "Nunes"}, "esnunes"}

// or

user := UserType{
    NameType: NameType{
        First: "Eduardo",
        Last:  "Nunes",
    },
    Username: "esnunes",
}