golang 介面與nil的判等

2021-10-12 09:18:39 字數 1982 閱讀 1119

在golang中,nil只能賦值給指標、channel、func、inte***ce、map或slice型別的變數。如果未遵循這個規則,則會引發panic。

nil不能賦值給結構體,編譯時會報錯

package main

import

"fmt"

type man struct

var(

man man ==

nil man1 *man

)func main (

)

結構體不能與nil判斷,執行時會報錯

)注意:當指標是nil的時候不能呼叫結構體屬性,會報空指標異常

package main

import

("fmt"

"reflect"

)type person inte***ce

type man struct

func

(*man)

***(

)func

getnilperson

() person

func

getperson

() person

return man

}var

( man man

man1 *man

per person

per1 =

getnilperson()

per2 =

getperson()

)func main (

)

官方對inte***ce的定義官方在常見問題中,對inte***ce判斷nil進行了描述:

在面對型別時,可以利用反射包(reflect)的typeof獲取的type,再呼叫kind來了解基礎結構類別

當型別和值都為空的時候介面才與nil相等

參考:

Golang之nil的妙用

在go語言中,布林型別的 0 初始值 為false,數值型別的 0 為0,字串型別的 0 為空字串 而指標 切片 對映 通道 函式和介面的 0 即為nil。當你宣告乙個結構體變數並未初始化時,該結構體所有的域 field 都為 0 初始值 type person struct var p perso...

golang 方法與介面

在程式語言中,方法與函式的概念來搞清楚。函式指的是乙個封裝的 塊,我們可以直接呼叫它,並且返回結果。而方法其實也是一種函式,只不過方法需要和某個物件繫結。golang並沒有類的概念,不過仍然有方法和介面這些概念。方法接收者是乙個特殊引數,給函式指定了這個引數之後,函式就成為方法了。這個特性有點像ko...

golang中介面賦值與方法集

golang中的介面可以輕鬆實現c 中的多型,而且沒有繼承自同一父類的限制,感覺方便很多。但是在使用的時候,如果沒有理解,也可能會遇到 坑 比如 go語言實戰 中的乙個例子 package main import fmt type user struct type notifier inte ce ...