[Go] golang中接口值(interface)與nil比較或指針類型之間比較的注意問題

注意問題 , 當對interface變量進行判斷是否爲nil時 , 只有當動態類型和動態值都是nil , 這個變量纔是nil函數

下面這種狀況不是nilspa

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之間進行比較也要注意 code

當兩個變量的動態類型同樣 , 動態值存的是指針地址 , 這個地址若是不是同樣的 , 那兩個值也是不一樣的blog

 

w1 := errors.New("ERR")
w2 := errors.New("ERR") fmt.Println(w1 == w2) // 輸出false

 

 

因爲 w1.value 和 w2.value 都是指針類型,它們又分別保存着不一樣的內存地址,因此他們的比較是得出 false內存

也正是這種實現,每一個New函數的調用都分配了一個獨特的和其餘錯誤不相同的實例it

相關文章
相關標籤/搜索