亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

&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 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號