使用地图参考访问地图

I try to loop through a map, that I pass as a pointer to a function, but I can't find a way to access the elements. This is the code:

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

Line 4 in this example return following compile error:

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

I tried brackets, but it had no effect. If I take away all reference operators (* &) then it compiles fine.

How must I write this?

You don't need to use a pointer with a map.

Map types are reference types, like pointers or slices

If you needed to change the Session you could use a pointer:

map[string]*Session

You are not taking into account the precedence of *.

*session[sid] really means *(session[sid]), that is, first indexing the pointer to map (hence the error), then dereferencing it.

You should use (*session)[sid].timestamp to first dereference the pointer to the map and then access it using the key.

De-reference the map first and then access it:

(*sessions)[sid]

It's also noteworthy that maps are actually reference types and therefore there is a very limited use-case of using pointers. Just passing a map value to a function will not copy the content. Example on play.