#go
#Вперед
Вопрос:
Я пытаюсь кое-что изменить в Go. У меня есть следующая структура, которую я создал
У меня есть вызов API, возвращающий что-то вроде этого
MyStruct struct {
DID string `bson:"d_id" json:"d_id"`
PID string `bson:"p_id" json:"p_id"`
...
}
в одном вызове в коде я хочу добавить новый ключ к этой структуре
Нравится
myNewStruct {
DID string `bson:"d_id" json:"d_id"`
PID string `bson:"p_id" json:"p_id"`
...
MyNewKey string `bson:"new_key" json:"new_key"`
}
Дело в том, что я хочу добавить новый ключ, а остальные сохранить в корне объекта, как объект выше. без необходимости переписывать полную структуру объекта или выполнять цикл for для каждого ключа.
type MyNewStruct struct {
*MyStruct
MyNewKey MyValueType
}
У меня есть две переменные с данными,
MyStructData
и MyNewKeyData
Я хочу, но не знаю, как объединить эти два данных внутри MyNewStruct
, чтобы все в MyStructData было в корне ключа, и все в MyNewKeyData
будет находиться внутри ключа MyNewKey
Я пытаюсь делать что-то вроде
theObjectIWant := MyNewStruct {
MyStructData,
"MyNewKey" : MyNewKeyData
}
но не работает
Комментарии:
1. Ответ Криса Тейлора выглядит так, как вы ищете. Я просто хочу прокомментировать терминологию Golang. То, что вы подразумеваете под «ключом», в Golang называется «полем», например,
DID
amp;PID
— это поляMyStruct
. Не путать с «ключом» в «карте».
Ответ №1:
Когда вы создаете анонимный элемент в структуре, компилятор генерирует имя для элемента, которое называется так же, как и тип. Вы можете использовать это имя при инициализации содержащей структуры.
Вот упрощенный пример
type MyStruct struct {
DID string
PID string
}
type MyNewStruct struct {
MyStruct
MyNewKey string
}
ms := MyStruct{
DID: "did",
PID: "pid",
}
m := MyNewStruct{
MyStruct: ms,
MyNewKey: "test",
}
Комментарии:
1. Будьте осторожны с маршалингом / разархивированием json!
Ответ №2:
Я не уверен, что полностью понимаю, что вы ищете, но это может помочь.
type MyStruct struct {
DID string
PID string
}
type myNewStruct struct {
MyStruct
newKey string
}
func main() {
s1 := MyStruct{DID: `bson:"d_id" json:"d_id"`}
s2 := myNewStruct{MyStruct: s1, newKey: `bson:"new_key" json:"new_key"`}
fmt.Println(s2.DID)
fmt.Println(s2.newKey)
}