&Struct{} 与 Struct{} 之间的区别

是否有理由使用&StructName{}而不是创建结构Struct{}?我看到很多使用前一种语法的例子,甚至在Effective Go Page 中,但我真的不明白为什么。


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


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

}


慕的地8271018
浏览 137回答 2
2回答

子衿沉夜

好吧,他们会有不同的行为。本质上,如果您想使用结构上的方法修改状态,那么您将需要一个指针,否则一个值就可以了。也许一个例子会更好:package mainimport "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go