为什么取消引用只是为了在 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
.
初始化的
在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
.