Инициализировать определение вложенной структуры в Golang, если оно имеет одинаковые объекты

У меня есть структура, как это:

type AutoGenerated struct {
 Accounting []struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
} `json:"accounting"`
Sales []struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
} `json:"sales"`

}

Я хочу присвоить ему значения следующим образом:

data := AutoGenerated{}
data.Accounting.LastName = "Apple2"
data.Accounting.FirstName = "Apple1"
data.Accounting.Age = 20
data.Sales.LastName = "Ball2"
data.Sales.FirstName = "Ball1"
data.Sales.Age = 30

Но это дает ошибку, которая является data.Accounting.LastName undefined

Хотя тот же код работает нормально для

type AutoGenerated struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
}

Где я присваивал значения следующим образом:

data := AutoGenerated{}
data.LastName = "Apple2"
data.FirstName = "Apple1"
data.Age = 20

Пожалуйста, не присваивайте значения вручную, я должен брать значения из другой функции.

2 ответа

Ваши внутренние структуры - это кусочки. Либо используйте это:

type AutoGenerated struct {
 Accounting struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
} `json:"accounting"`
Sales struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
} `json:"sales"`

Или, если вам нужно иметь более одной Продажи или Бухгалтерии на структуру, вам нужно инициализировать срезы и ссылаться на них по индексу.

В вашем объекте data из AutoGenerated тип, data.Accounting это кусок структуры. Прежде чем вы сможете использовать data.Accounting срез, вам нужно будет инициализировать его. Пример использования будет:

type AutoGenerated struct {
 Accounting []Account `json:"accounting"`
 Sales []struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
 } `json:"sales"`
}

// defined separately for better readability
type Account struct {
    FirstName string `json:"firstName"`
    LastName string `json:"lastName"`
    Age int `json:"age"`
}

Затем назначить значения для структуры:

a := AutoGenerated{}
a.Accounting = make([]Account, 1) // create the slice of appropriate length
// append values to it
a.Accounting = append(a.Accounting, Account{"firstname", "lastname", 30})
Другие вопросы по тегам