91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang中的nil和零值怎么聲明

發布時間:2023-02-08 14:43:38 來源:億速云 閱讀:164 作者:iii 欄目:編程語言

這篇文章主要講解了“Golang中的nil和零值怎么聲明”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Golang中的nil和零值怎么聲明”吧!

非空和空類型

在go中類型可以是空或非空。 非空類型永遠不能為nil,并且永遠不會使您導致 nil-panic (等效于Java的nullpointerexception) 盡管不像java(或其他具有空類型的語言)中那么多,但在處理空類型時,我們仍須謹慎一點。

非空基本類型

在go中,基本類型不可為空。像這樣的聲明

var a int = nil

無法編譯,因為int永遠不能為nil. 未分配的int類型的默認值為0.
運行語句

var a int // int類型的默認值不能為nil
fmt.Println(a) // 0

將輸出int的默認值 “0”. 我們將此稱為類型的零值.

int默認為0一樣, 以下是其他默認值為零值的基礎類型:

TypesZero value
int, int8, int16, int32, int640
uint, uint8, uint16, uint32, uint640
uintptr0
float32, float640.0
byte0
rune0
string"” (empty string)
complex64, complex128(0,0i)
arrays of non-nillable typesarray of zero-values
arrays of nillable typesarray of nil-values

Non-nillable structs

組合的struct類型也是不可空的,并且struct的默認值將包含其所有字段的默認值。

設定一個 Person 結構體的代碼,

type Person struct {
    Name string
    Age  int
}
var p Person // person 類型的默認 0 值

fmt.Printf("[%#v]\n", p)

當你在 main 方法里運行這段代碼的時候,將會打印出 [main.Person{Name:"", Age:0}]  你可以在 Go Playground 上運行這段代碼進行測試。

nillable 類型

還有一種更高級到 nillable 類型,如果對應的類型未初始化,將會報錯,觸發 panic 。

這些可以為 nillabel 類型的 函數,通道,切片,map,接口以及指針.

但是,nil-slice 和nil-maps 仍然可以使用,在我們開始使用它們之前不必進行初始化。

nil-maps

如果 map 的值為 nil,map 將始終返回值的零值,與返回不存在 map 中的 Key 的結果一樣。代碼

var p map[int]string // nil map
fmt.Printf(" %#v  length %d \n",  p[99], len(p))

讓我們來打印下 "" length 0, 我們可以獲得鍵為99的字符串string的值為零.

將值分配給 nil-map, 會引起死機狀況的出現:

var p map[string]int    // nil map 
p["nils"] = 19 // panic: 對nil-map中的條目賦值

nil-slices

在外部引用切片 will 將導致死機,但是 len()cap() 的操作不會導致死機出現. 他們只返回 0, 因為對于未初始化的切片,其容量和長度都為零. 所以他們可以在nil-slice上成功調用append. 示例代碼如下:

var p []string // nil slice
fmt.Printf("uninitialized -> %d, %d\n",  len(p), cap(p))
p1 := append(p, "nils") // 從P創建一個新的切片p1
fmt.Printf("after append  -> %d, %d %#v\n",  len(p1), cap(p1), p1)

會打印:

uninitialized -> 0, 0
after append  -> 1, 1 []string{"nils"}

在 Go Playground 上試驗。

可為 nil 值的指針、函數和接口類型會引起 panic

Pointers and interface-types are however nillable. Whenever dealing with these types, we have to consider if they are nil or not to avoid panics. These code-snippets for instance, will cause a panic:

指針和接口類型是可為 nil 值的。每當處理這些類型時,我們都必須考慮它們是否為零,以免出現 Panic。例如,這些代碼片段將引起 Panic:

var p *int // 指向 int 的指針
*p++ // panic: runtime error: invalid memory address or nil pointer dereference
//  p是無內容的地址,因此為nil

var p error // 類型 error 的 nil 值
error.Error() // panic: runtime error: invalid memory address or nil pointer dereference

var f func(string) // nil 函數
f("oh oh") // panic: runtime error: invalid memory address or nil pointer dereference

nil channel 永遠阻塞

嘗試從 nil 通道讀取或寫入 nil 通道將永遠受阻。關閉nil通道會引起  Panic 。

感謝各位的閱讀,以上就是“Golang中的nil和零值怎么聲明”的內容了,經過本文的學習后,相信大家對Golang中的nil和零值怎么聲明這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

独山县| 崇明县| 龙胜| 江油市| 江源县| 合水县| 文成县| 彭阳县| 防城港市| 上饶县| 教育| 资溪县| 聂拉木县| SHOW| 体育| 饶阳县| 寻乌县| 苍梧县| 正宁县| 贵州省| 元朗区| 屯门区| 正定县| 吴旗县| 崇左市| 应用必备| 马公市| 西畴县| 铜川市| 昌宁县| 台前县| 甘孜县| 奎屯市| 东阳市| 广灵县| 镇巴县| 鄂托克旗| 会东县| 永胜县| 高碑店市| 石首市|