Home > Blockchain >  Why dereference only to reference again in Go
Why dereference only to reference again in Go

Time:11-14

In gorilla/sessions there is the following code:

func (s *CookieStore) New(r *http.Request, name string) (*Session, error) {
    session := NewSession(s, name)
    opts := *s.Options
    session.Options = &opts
    ...

Where s.Options is of type *sessions.Options:

type CookieStore struct {
    ...
    Options *Options // default configuration
}

And sessios.Session.Options is also of type *sessions.Options:

type Session struct {
    ...
    Options *Options
    ...
}

My question is, what is the point of dereferencing s.Options and then assigning its reference to session.Options? Why not just do:

func (s *CookieStore) New(r *http.Request, name string) (*Session, error) {
    session := NewSession(s, name)
    session.Options = s.Options
    ...

Is this to make sure the dereferenced value of s.Options is copied over to session.Options, and not the actual reference therefore avoiding both objects pointing to the same thing?

CodePudding user response:

It is to prevent two pointers from pointing to the same location.

session := NewSession(s, name)
opts := *s.Options

At this point, opts contains a copy of s.Options. Then:

session.Options = &opts

This will set session.Options to an options object that is different from s.Options, but whose contents are initialized from s.Options.

  • Related