# #loops #go #struct
Вопрос:
У меня есть функция, которая выполняет некоторое сопоставление между 2 структурами:
Struct1 => Struct2
где Struct1
происходит следующее:
type Struct1 struct {
A Transaction `json:"transaction"`
B string `json:"name"`
...
}
в то Struct2
время как выглядит так:
type Struct2 struct {
C AnotherTransaction `json:"transaction"`
D string `json:"name"`
...
}
У меня есть функция , которая отображает «внутренний» тип Transaction => AnotherTransaction
, но проблема в том, что существует внешняя структура, названная Struct3
для удобства следующим образом:
type Struct3 struct {
Failed []Struct2 `json:"failed"` // a list of transactions
Success []Struct2 `json:"success"`
}
func mapTo(st3 Struct3) Struct1 {
st1 := Transaction{}
// the mapping between A => C is quite lengthy
st1.someField = st3.struct2.anotherField
return st1 // now mapped
}
Моя проблема в том, что из структуры 3 мне нужно получить доступ к каждому элементу структуры 2 и запустить функцию сопоставления выше, но я не уверен, как это сделать. Как я могу перебрать каждый элемент []Struct2
добавления каждого элемента и вернуть Struct3
теперь заполненное сопоставление с mapTo()
?
Ответ №1:
Вы можете обновить аргумент функции map до struct2 и выполнить цикл по полям массива struct3 из main
функции и отправить каждое из них в toMap
функцию.
func main() {
type Struct3 struct {
Failed []Struct2 `json:"failed"` // a list of transactions
Success []Struct2 `json:"success"`
}
s3 := amp;Struct3{
Failed: make([]Struct2, 0),
Success: make([]Struct2, 0),
}
for i := range s3.Success {
// do something with the result value
_ = toMap(s3.Success[i])
}
for i := range s3.Failed {
// do something with the result value
_ = toMap(s3.Failed[i])
}
}
func mapTo(st2 Struct2) Struct1 {
st1 := Transaction{}
// the mapping between A => C is quite lengthy
st1.someField = st2.anotherField
return st1 // now mapped
}