为什么取消引用只是为了在 Go 中再次引用

Why dereference only to reference again in Go

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
    ...

其中 s.Options 的类型是 *sessions.Options:

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

sessios.Session.Options也是类型*sessions.Options:

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

我的问题是,取消引用 s.Options 然后将其引用分配给 session.Options 有什么意义?为什么不这样做:

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

这是为了确保 s.Options 的取消引用值被复制到 session.Options,而不是实际引用,从而避免两个对象指向同一事物?

防止两个指针指向同一个位置

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

此时,opts 包含 s.Options 的副本。那么:

session.Options = &opts

这会将 session.Options 设置为不同于 s.Options 的选项对象,但其内容是从 s.Options.

初始化的