Nil Slice 與 Nil Interface
在 Go 中,nil 切片與 nil 介面不同。以下程式碼示範了此行為:
<code class="go">package main import "fmt" func main() { var i []int = nil yes(i) // output: true no(i) // output: false } func yes(thing []int) { fmt.Println(thing == nil) } func no(thing interface{}) { fmt.Println(thing == nil) }</code>
兩個函數之間的輸出差異是由於 Go 處理介面類型的方式造成的。
介面類型
Go 中的介面類型是可以由特定值類型實現的方法的集合。當使用interface{}變數時,它可以保存實作介面的任何類型的任何值。
Nil Interface
當分配interface{}變數時to nil,介面的data欄位設定為nil,但是type欄位不是。因此,nil 介面不等於 nil。
Nil Slice
另一方面,nil 切片只是一個沒有元素的切片。當您將 nil 切片與 nil 進行比較時,比較結果為 true,因為切片的資料和類型欄位都設為 nil。
結論
因此,程式碼範例中兩個函數之間的輸出差異是由於nil([]int) 是一個nil 切片,而nil(interface{ }) 是一個nil 介面。與 nil 相比,nil 切片的計算結果為 true,而 nil 介面的計算結果為 false。
以上是為什麼 `nil([]int)` 等於 `nil`,但 `nil(interface{})` 不等於?的詳細內容。更多資訊請關注PHP中文網其他相關文章!