繁体   English   中英

&Struct {}与Struct {}之间的差异

[英]Difference between &Struct{} vs Struct{}

我有理由使用&StructName{}而不是Struct{}来创建结构吗? 我看到许多使用前一种语法的例子,即使在Effective Go页面中,但我真的不明白为什么。

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

我知道通过使用&我会收到指针而不是值,但我想知道为什么我会使用&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

}

你可以在这里跑去游乐场

假设您知道指针和值之间的一般区别:

第一种方式是分配一个结构,并将指向该分配结构的指针分配给变量p1

p1 := &StructName{}

第二种方式分配一个结构并将一个值(结构本身)赋给变量s 然后可以将指向该结构的指针分配给另一个变量(以下示例中为p2 )。

s := StructName{}
p2 := &s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM