go - 为什么取消引用只是为了在 Go 中再次引用
问题描述
里面有gorilla/sessions
以下代码:
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
。
推荐阅读
- java - 如何在java spring websocket中实现乒乓球
- excel - Excel Vba 刷新数据透视表,它们从报表连接中消失
- cassandra - 在 scylla 中截断表格 - 加载回来。
- r - 为R中的所有变量创建时间序列对象
- php - 修改 get_avatar() 函数
- r - Problem with Analysing Turkish Text while using stopwords "tr" with R
- c# - 在 C# 中禁用 Excel 工作簿的自动保存?
- http - 如何从 json 请求创建一个复杂的类
- amazon-web-services - 在 AWS Lambda 中访问用户身份
- python - 在 matplotlib 中,使用 plot 和 hist 的返回绘制直方图