我在golang中有這樣一個結構,如下所示:
type test struct {
value int
}
當我嘗試這個時
t := test{1}
fmt.Println((&t).value)
fmt.Println(t.value)
編譯器沒有報錯,我得到了同樣的輸出1,這個輸出讓我很困惑。golang中(&t).value和t.value有什么區別?
uj5u.com熱心網友回復:
選擇器運算式p.fwherep是指向某個結構型別的指標,并且f是該結構型別的欄位,是 的簡寫(*p).f。
您的運算式(&t)會產生一個指標型別的值*test。這就是.(&t).value的簡寫(*(&t)).value。
選擇器:
以下規則適用于選擇器:
- 對于
xtypeT或*TwhereT不是指標或介面型別的值,表示存在此類 的x.f最淺深度的欄位或方法。如果不完全有一個深度最淺的,則選擇器運算式是非法的。Tff- 對于
x型別為介面型別的值,I表示名稱為動態值的實際方法。如果 的方法集中沒有具有名稱的方法 ,則選擇器運算式是非法的。Ix.ffxfI- 作為一個例外,如果 of 的型別
x是已定義的指標型別并且(*x).f是表示欄位(但不是方法)的有效選擇器運算式,x.f則為(*x).f.- 在所有其他情況下,
x.f都是非法的。- If
x是指標型別并且具有值 nil 并x.f表示一個結構欄位,分配或評估x.f會導致運行時恐慌。- 如果
x是 interface 型別并且具有 valuenil,則呼叫或評估該方法x.f會導致運行時恐慌。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/454478.html
上一篇:laravel微風身份驗證在請求檔案中失敗,但它在控制器中回傳經過身份驗證的用戶
下一篇:將引數傳遞給函式引數不起作用
