Golang:使用其引用访问地图

Mic*_*ael 20 dictionary pointers go

我尝试遍历一个地图,我作为指向函数的指针传递,但我找不到访问元素的方法.这是代码:

func refreshSession(sessions *map[string]Session) {
    now := time.Now()
    for sid := range *sessions {
        if now.After(*sessions[sid].timestamp.Add(sessionRefresh)) {
            delete( *sessions, sid )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此示例中的第4行返回以下编译错误:

./controller.go:120: invalid operation: sessions[sid] (type *map[string]Session does not support indexing)
Run Code Online (Sandbox Code Playgroud)

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

我该怎么写这个?

jma*_*ney 36

您不需要使用带有地图的指针.

地图类型是引用类型,如指针或切片[1]

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

map[string]*Session

[1] https://blog.golang.org/go-maps-in-action


nem*_*emo 10

首先取消引用地图,然后访问它:

(*sessions)[sid]
Run Code Online (Sandbox Code Playgroud)

值得注意的是,地图实际上是引用类型,因此使用指针的用例非常有限.只是将地图值传递给函数不会复制内容.比赛的例子.


sir*_*nga 9

你没有考虑到的优先权*.

*session[sid]实际上意味着*(session[sid]),首先将指针指向map(因此错误),然后解除引用它.

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