我有理由使用& StructName {}而不是Struct {}来创建结构吗?我看到许多使用前一种语法的例子,即使在
Effective Go Page中,但我真的不明白为什么.
补充说明:
我不确定我是否用这两种方法很好地解释了我的问题,所以让我提炼我的问题.@H_502_3@
我知道通过使用&我会收到一个指针而不是一个值但是我想知道为什么我会使用& StructName {}而不是StructName {}.例如,使用有什么好处:@H_502_3@
- func NewJob(command string,logger *log.Logger) *Job {
- return &Job{command,logger}
- }
代替:@H_502_3@
- 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运行它@H_502_3@