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

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

Linda Hamilton
发布: 2024-12-14 08:03:12
原创
332 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板