加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

指针 – Golang – &Struct {}与Struct {}之间的差异

发布时间:2020-12-16 19:03:08 所属栏目:大数据 来源:网络整理
导读:我有理由使用 StructName {}而不是Struct {}来创建结构吗?我看到许多使用前一种语法的例子,即使在 Effective Go Page中,但我真的不明白为什么. 补充说明: 我不确定我是否用这两种方法很好地解释了我的问题,所以让我提炼我的问题. 我知道通过使用我会收到一
我有理由使用& StructName {}而不是Struct {}来创建结构吗?我看到许多使用前一种语法的例子,即使在 Effective Go Page中,但我真的不明白为什么.

补充说明:
我不确定我是否用这两种方法很好地解释了我的问题,所以让我提炼我的问题.

我知道通过使用&我会收到一个指针而不是一个值但是我想知道为什么我会使用& StructName {}而不是StructName {}.例如,使用有什么好处:

func NewJob(command string,logger *log.Logger) *Job {
    return &Job{command,logger}
}

代替:

func NewJob(command string,logger *log.Logger) Job {
    return Job{command,logger}
}
好吧,他们会有不同的行为.本质上,如果你想使用结构上的方法修改状态,那么你将需要一个指针,否则一个值就可以了.也许一个例子会更好:
package main
import "fmt"



type test_struct struct {
  Message string
}

func (t test_struct)Say (){
   fmt.Println(t.Message)
}

func (t test_struct)Update(m string){
  t.Message = m; 
}

func (t * test_struct) SayP(){
   fmt.Println(t.Message)
}

func (t* test_struct) UpdateP(m string)  {
  t.Message = m;
}

func main(){
  ts := test_struct{}
  ts.Message = "test";
  ts.Say()
  ts.Update("test2")
  ts.Say() // will still output test

  tsp := &test_struct{}
  tsp.Message = "test"
  tsp.SayP();
  tsp.UpdateP("test2")
  tsp.SayP() // will output test2

}

你可以在go playground运行它

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读