我尝试遍历一个 Map ,我作为指向函数的指针传递,但我找不到访问元素的方法 . 这是代码:
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 回答
您不需要使用带有 Map 的指针 .
如果您需要更改
Session
,可以使用指针:map[string]*Session
[1]https://blog.golang.org/go-maps-in-action
首先取消引用 Map ,然后访问它:
值得注意的是, Map 实际上是引用类型,因此使用指针的用例非常有限 . 只是将 Map 值传递给函数不会复制内容 . Example on play .
您没有考虑
*
的优先顺序 .*session[sid]
实际上意味着*(session[sid])
,即首先将指针指向map(因此错误),然后解除引用它 .您应该使用
(*session)[sid].timestamp
首先取消引用指向 Map 的指针,然后使用该键访问它 .