這將編譯:package mainimport ( "fmt")type User struct { ID int64}func main() { v := (*User)(nil) fmt.Println(v)}這里,是什么?我在go-pg遇到了這種符號,并且不知道找到答案,因為在谷歌上搜索非常困難。(*User)(nil)
1 回答

開滿天機
TA貢獻1786條經(jīng)驗 獲得超13個贊
如果 是一種類型,則是另一種類型,一種指針類型,一種指向 的指針。User
*User
User
(*User)(nil)
是一種類型轉(zhuǎn)換:它將非類型化的預(yù)聲明標(biāo)識符轉(zhuǎn)換為 。您必須放在括號中,否則表達式將嘗試轉(zhuǎn)換為(如果是結(jié)構(gòu),則為編譯時錯誤),然后取消引用它。nil
(*User)
*User
nil
User
User
所以將是一個類型的變量,保存指針值。v
*User
nil
表達式是一個短變量聲明,它等效于(速記)以下變量聲明:v := (*User)(nil)
var v *User = nil
這當(dāng)然與
var v *User
因為如果缺少初始化表達式,則變量將初始化為其零值,該值適用于所有指針類型。nil
- 1 回答
- 0 關(guān)注
- 98 瀏覽
添加回答
舉報
0/150
提交
取消