为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕的地8271018 2021-11-22 15:10:07
是否有理由使用&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}}
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

好吧,他们会有不同的行为。本质上,如果您想使用结构上的方法修改状态,那么您将需要一个指针,否则一个值就可以了。也许一个例子会更好:


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


}

你可以在这里运行它去游乐场


查看完整回答
反对 回复 2021-11-22
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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

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

p1 := &StructName{}

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

s := StructName{}
p2 := &s


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信