在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 ...