gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:17:26 25 4
gpt4 key购买 nike

为什么我应该使用 &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

关于pointers - &Struct{} 与 Struct{} 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33593545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com