2 回答

TA貢獻1873條經(jīng)驗 獲得超9個贊
是的,指向結(jié)構(gòu)的指針會自動取消引用。從關(guān)于選擇器的規(guī)范:
以下規(guī)則適用于選擇器:
對于
x
typeT
或*T
whereT
不是指針或接口類型的值,x.f
表示最淺深度的字段或方法,T
其中存在此類f
。如果不完全是f
最淺深度的,則選擇器表達式是非法的。...
作為一個例外,如果 的類型
x
是命名指針類型并且(*x).f
是表示字段(但不是方法)的有效選擇器表達式,x.f
則是(*x).f
.
因此,以下兩個語句是相同的(首選第一個):
filename := p.Title + ".txt" filename := (*p).Title + ".txt"

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ā)生隱式解引用或類型操作的地址,您的代碼將無法編譯。
- 2 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報