第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

go:struct 中的數組丟失其內容

go:struct 中的數組丟失其內容

Go
慕標琳琳 2021-09-27 14:18:42
下面的代碼(共享:鏈接)應該在一個訂單中插入兩個位置(訂單和位置都是struct s:package mainimport "fmt"type orderPosition struct{   art string   qty string   }type order struct{   posList []orderPosition}func main() {  o := new(order)  o.loadPos()  fmt.Printf("# pos: %d\n",len(o.posList))}func (o order) loadPos() {  o.posList = append(o.posList, orderPosition {art: "art 1", qty: "2 pc"})  o.posList = append(o.posList, orderPosition {art: "art 2", qty: "7 pc"})  fmt.Printf("# pos: %d\n",len(o.posList))}輸出是:# pos: 2# pos: 0    loadPos方法按順序填充倉位。但是一旦離開該方法,位置列表就會丟失。為什么數組會丟失其內容?任何幫助將不勝感激。
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

擴展帕特里克的回答,在Golang FAQ 中有更多的見解

我應該定義值還是指針的方法?

func (s *MyStruct) pointerMethod() { } // method on pointer
func (s MyStruct)  valueMethod()   { } // method on value

首先,也是最重要的,該方法是否需要修改接收器?如果是,則接收者必須是一個指針。(切片和映射充當引用,所以它們的故事有點微妙,但是例如要更改方法中切片的長度,接收者仍然必須是指針。)在上面的示例中,如果 pointerMethod 修改了s,調用者將看到這些更改,但 valueMethod 是使用調用者參數的副本(這是傳遞值的定義)調用的,因此調用者將看不到它所做的更改。

二是對效率的考慮。如果接收器很大,例如一個大的結構,使用指針接收器會便宜得多。

接下來是一致性。如果該類型的某些方法必須有指針接收器,其余的也應該如此,因此無論如何使用該類型,方法集都是一致的。

對于諸如基本類型、切片和小型結構之類的類型,值接收器非常便宜,因此除非方法的語義需要指針,否則值接收器是高效且清晰的。


查看完整回答
反對 回復 2021-09-27
  • 2 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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