使用其引用访问地图
Accessing a map using its reference
我尝试遍历一个映射,我将它作为指向函数的指针传递,但我找不到访问元素的方法。这是代码:
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 行 return 以下编译错误:
./controller.go:120: invalid operation: sessions[sid] (type *map[string]Session does not support indexing)
括号我试过了,没有效果。如果我去掉所有引用运算符 (* &),那么它可以正常编译。
这个要怎么写?
您没有考虑 *
的优先级。
*session[sid]
真正的意思是 *(session[sid])
,也就是说,首先索引指向映射的指针(因此出错),然后取消引用它。
您应该使用 (*session)[sid].timestamp
首先取消对地图指针的引用,然后使用密钥访问它。
先取消引用地图,然后访问它 (Example on play):
(*sessions)[sid]
还值得注意的是,映射实际上是引用类型,因此使用指针的用例非常有限。仅将映射值传递给函数不会复制内容。 Example on play.
您不需要在地图上使用指针。
如果您需要更改 Session
您可以使用指针:
map[string]*Session
我尝试遍历一个映射,我将它作为指向函数的指针传递,但我找不到访问元素的方法。这是代码:
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 行 return 以下编译错误:
./controller.go:120: invalid operation: sessions[sid] (type *map[string]Session does not support indexing)
括号我试过了,没有效果。如果我去掉所有引用运算符 (* &),那么它可以正常编译。
这个要怎么写?
您没有考虑 *
的优先级。
*session[sid]
真正的意思是 *(session[sid])
,也就是说,首先索引指向映射的指针(因此出错),然后取消引用它。
您应该使用 (*session)[sid].timestamp
首先取消对地图指针的引用,然后使用密钥访问它。
先取消引用地图,然后访问它 (Example on play):
(*sessions)[sid]
还值得注意的是,映射实际上是引用类型,因此使用指针的用例非常有限。仅将映射值传递给函数不会复制内容。 Example on play.
您不需要在地图上使用指针。
如果您需要更改 Session
您可以使用指针:
map[string]*Session