为了账号安全,请及时绑定邮箱和手机立即绑定

使用地图的参考访问地图

使用地图的参考访问地图

Go
临摹微笑 2021-09-13 15:56:40
我尝试遍历映射,将其作为指向函数的指针传递,但找不到访问元素的方法。这是代码:func refreshSession(sessions *map[string]Session) {    now := time.Now()    for sid := range *sessions {        if now.After(*sessions[sid].timestamp.Add(sessionRefresh)) {            delete( *sessions, sid )        }    }}此示例中的第 4 行返回以下编译错误:./controller.go:120: invalid operation: sessions[sid] (type *map[string]Session does not support indexing)我试过括号,但没有效果。如果我去掉所有引用运算符 (* &),那么它编译得很好。我该怎么写这个?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您不需要将指针与地图一起使用。

映射类型是引用类型,如指针或切片

如果您需要更改Session您可以使用指针:

map[string]*Session


查看完整回答
反对 回复 2021-09-13
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

首先取消引用地图,然后访问它(播放示例):

(*sessions)[sid]

还值得注意的是,映射实际上是引用类型,因此使用指针的用例非常有限。仅将映射值传递给函数不会复制内容。播放示例


查看完整回答
反对 回复 2021-09-13
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您没有考虑*.

*session[sid]真正的意思是*(session[sid]),即首先索引指向映射的指针(因此出现错误),然后取消引用它。

您应该使用(*session)[sid].timestamp首先取消引用指向地图的指针,然后使用键访问它。


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信