首页 >后端开发 >Golang >为什么我无法获取 Go 中映射元素的地址?

为什么我无法获取 Go 中映射元素的地址?

Linda Hamilton
Linda Hamilton原创
2024-12-14 08:03:12334浏览

Why Can't I Take the Address of a Map Element in Go?

为什么“无法获取映射元素的地址”?

考虑以下代码片段:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn