Добавление значений к массивам внутри карты в Go
При работе с картами в Go манипулирование массивами внутри этих карт может оказаться сложной задачей. В этой статье представлено решение проблемы добавления значений в массивы, хранящиеся внутри карты.
Чтобы понять проблему, рассмотрите следующий код:
type Example struct {
Id []int
Name []string
}
var MyMap map[string]Example
Здесь MyMap — это карта, которая сопоставляет строки с экземплярами структуры примера. Структура примера содержит массивы Id и Name. Цель состоит в том, чтобы добавить значения в эти массивы.
Первоначальная попытка сделать это часто включает вызов методов в структуре примера и передачу приемника указателя для доступа и изменения массивов. Однако прямое присвоение результата Oferty.AppendExample(1, "SomeText") MyMap["key1"] не будет работать, поскольку карта хранит копию структуры примера, а не саму структуру.
The решение заключается в изменении кода следующим образом:
package main
import "fmt"
type Example struct {
Id []int
Name []string
}
func (data *Example) AppendOffer(id int, name string) {
data.Id = append(data.Id, id)
data.Name = append(data.Name, name)
}
var MyMap map[string]*Example
func main() {
obj := &Example{[]int{}, []string{}}
obj.AppendOffer(1, "SomeText")
MyMap = make(map[string]*Example)
MyMap["key1"] = obj
fmt.Println(MyMap)
}
Создавая экземпляр структуры примера и сохраняя ссылку на него на карте (используя тип указателя), мы можем напрямую изменять массивы. Метод AppendOffer работает с указателем на структуру примера, позволяя нам добавлять значения в массивы.
Это решение эффективно добавляет значения к массивам в структуре примера, хранящимся в MyMap. Он обеспечивает четкий и лаконичный подход к управлению массивами внутри карт в Go.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3