注意問題 , 當對interface變數進行判斷是否為nil時 , 只有當動態型別和動態值都是nil , 這個變數才是nil
下面這種情況不是nil
func f(out io.Writer) { // ...do something... if out != nil { out.Write([]byte("done!\n")) } } var buf *bytes.Buffer f(buf)

上面的情況 , 動態型別部分不是nil , 因此 out就不是nil
動態型別為指標的interface之間進行比較也要注意
當兩個變數的動態型別一樣 , 動態值存的是指標地址 , 這個地址如果不是一樣的 , 那兩個值也是不同的
w1 := errors.New("ERR")
w2 := errors.New("ERR")
fmt.Println(w1 == w2) // 輸出false

由于 w1.value 和 w2.value 都是指標型別,它們又分別保存著不同的記憶體地址,所以他們的比較是得出 false
也正是這種實作,每個New函式的呼叫都分配了一個獨特的和其他錯誤不相同的實體
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/249301.html
標籤:Go
