解开 Go 中地图内的数组附加
在 Go 中,地图是组织数据的强大工具。但是,当尝试将值附加到这些映射中的数组时,可能会变得很棘手。考虑一个假设的场景:
var MyMap map[string]Example type Example struct { Id []int Name []string }
谜题揭晓
代码片段尝试将整数和字符串附加到名为 MyMap 的映射中的数组。然而,该实现包含一个严重错误:
MyMap["key1"] = Offerty.AppendOffer(1, "SomeText")
这里,Offerty 无法被识别为对象,因为它从未被定义。要解决此问题,请在将示例结构体与地图关联之前创建一个实例,如下所示:
obj := &Example{[]int{}, []string{}} obj.AppendOffer(1, "SomeText")
引用,而非复制
此外,代码片段仅创建示例结构的副本,而不是对其的引用。要维护指向映射内结构的指针:
MyMap = make(map[string]*Example) MyMap["key1"] = obj
解决方案
通过这些修改,修改后的代码成功将值附加到映射内的数组:
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) }
此解决方案保留了映射中的原始示例结构,从而可以从外部范围更新和修改其数组。
以上是如何在 Go 中将值附加到映射内的数组?的详细内容。更多信息请关注PHP中文网其他相关文章!