Инициализировать определение вложенной структуры в 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})