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

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

指針是否在方法內(nèi)部默認取消引用?

指針是否在方法內(nèi)部默認取消引用?

Go
BIG陽 2021-10-18 09:51:13
我對 Go 中結(jié)構(gòu)的方法感到困惑。我在他們有的教程中跟隨:func (p *Page) save() error {    filename := p.Title + ".txt"    return ioutil.WriteFile(filename, p.Body, 0600)}根據(jù)我的理解,p是指針,您需要在檢索屬性之前取消引用指針,例如:filename := (*p).Title + ".txt"這對我來說有意義的唯一方法是如果點->在 C++ 中表現(xiàn)得像。我錯過了什么?
查看完整描述

2 回答

?
眼眸繁星

TA貢獻1873條經(jīng)驗 獲得超9個贊

是的,指向結(jié)構(gòu)的指針會自動取消引用。從關(guān)于選擇器的規(guī)范:

以下規(guī)則適用于選擇器:

  1. 對于xtypeT*TwhereT不是指針或接口類型的值,x.f表示最淺深度的字段或方法,T 其中存在此類f。如果不完全是f最淺深度的,則選擇器表達式是非法的。

...

  1. 作為一個例外,如果 的類型x是命名指針類型并且(*x).f是表示字段(但不是方法)的有效選擇器表達式,x.f則是(*x).f.

因此,以下兩個語句是相同的(首選第一個):

filename := p.Title + ".txt"
filename := (*p).Title + ".txt"


查看完整回答
反對 回復(fù) 2021-10-18
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

您不必遵循指針或使用特殊的訪問運算符來訪問 Go 中結(jié)構(gòu)的字段。


myRef := &ILikeCompositeLiteralInitilization{}

fmt.Println(myRef.Dereferenced);

在功能上等同于;


fmt.Printn((*myRef).Dereferenced);

可能值得注意的是,函數(shù)的行為不是這樣的。意思是,我必須取消引用才能調(diào)用接收類型是值而不是指針的方法。IE;


func (*ILikeCompositeLiteralInitilization) PointerVersion()

func (ILikeCompositeLiteralInitilization) ValueVersion()


myRef.PointerVersion() // compiler likes this


myRef.ValueVersion() // won't compile


(*myRef).ValueVersion() // compiler is OK with this

基本上,使用函數(shù)不會發(fā)生隱式解引用或類型操作的地址,您的代碼將無法編譯。


查看完整回答
反對 回復(fù) 2021-10-18
  • 2 回答
  • 0 關(guān)注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號