使用地图的参考访问地图

我尝试遍历映射,将其作为指向函数的指针传递,但找不到访问元素的方法。这是代码:


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)

我试过括号,但没有效果。如果我去掉所有引用运算符 (* &),那么它编译得很好。


我该怎么写这个?


临摹微笑
浏览 212回答 3
3回答

料青山看我应如是

您不需要将指针与地图一起使用。映射类型是引用类型,如指针或切片如果您需要更改Session您可以使用指针:map[string]*Session

拉丁的传说

首先取消引用地图,然后访问它(播放示例):(*sessions)[sid]还值得注意的是,映射实际上是引用类型,因此使用指针的用例非常有限。仅将映射值传递给函数不会复制内容。播放示例。

一只甜甜圈

您没有考虑*.*session[sid]真正的意思是*(session[sid]),即首先索引指向映射的指针(因此出现错误),然后取消引用它。您应该使用(*session)[sid].timestamp首先取消引用指向地图的指针,然后使用键访问它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go