为什么“无法获取映射元素的地址”?
考虑以下代码片段:
odsMap := map[string]XMLElement{ "key": {Value: "value"}, } segRef := "key"
以下语句有效:
x := odsMap[segRef] x.GetValue("@OriginDestinationKey")
但是,此语句失败并显示以下错误:
cannot call pointer method on odsMap[segRef] cannot take the address of odsMap[segRef]
发生这些错误是因为地图索引表达式不可寻址。当添加新条目时,映射的内部结构可能会发生变化,从而阻止其地址被获取。
因此,当使用存储在映射中的非指针值上的指针接收器访问方法时,需要中间变量来获取该值的地址,如工作示例中所示。
要避免此问题,请考虑将指针值存储在映射中。例如:
type My int func (m *My) Str() string { return strconv.Itoa(int(*m)) } odsMap := map[string]*My{} my := My(12) odsMap[segRef] = &my
或者,您可以将非指针值分配给局部变量并获取其地址:
x := odsMap[segRef] x.GetValue("@OriginDestinationKey") // Method call on *XMLElement
总之,映射索引表达式是不可寻址的,在访问映射中非指针值的指针方法时,需要使用中间变量或替代存储策略。
以上是为什么我无法获取 Go 中映射元素的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!