這編譯:
package main
import (
"fmt"
)
type User struct {
ID int64
}
func main() {
v := (*User)(nil)
fmt.Println(v)
}
在這里,什么是(*User)(nil)?我在go-pg遇到了這個符號,但沒有找到答案的線索,因為很難在谷歌上搜索。
uj5u.com熱心網友回復:
如果User是一個型別,*User則是另一個型別,一個指標型別,一個指向User.
(*User)(nil)是一種型別轉換:它將無型別的nil預先宣告的識別符號轉換為(*User). 您必須放入*User括號,否則運算式將嘗試轉換nil為User(如果User是結構,則為編譯時錯誤),然后取消參考它。
所以v將是一個型別的變數*User,保存nil指標值。
該v := (*User)(nil)運算式是一個簡短的變數宣告,它等效于(速記)以下變數宣告:
var v *User = nil
這當然是一樣的
var v *User
因為如果缺少初始化運算式,變數將被初始化為零值,這是nil所有指標型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315002.html
上一篇:回傳時雙成為指標?
