go中interface{}判nil
阿新 • • 發佈:2020-07-22
在go中的nil只能賦值給指標、channel、func、interface、map或slice型別的變數
interface在底層,interface作為兩個成員來實現,一個型別和一個值假設為type 和value
type儲存型別 ,value儲存型別的值
只有內部型別都為nil,總的interface才是空的。
var inter interface{} = nil
if inter==nil{
fmt.Println("empty")
}else{
fmt.Println("not empty")
}
結果為empty
nil為untyped型別,賦值給interface,則type和value都是nil,比較的結果是true
其他有型別的賦值給inter,結果是false,例如
var inter interface{} = (*int)(nil)
if inter==nil{
fmt.Println("empty")
}else{
fmt.Println("not empty")
}
結果為 not empty
對interface{}判空的方法是使用反射的方式進行判斷
var inter interface{} = (*int)(nil)
if IsNil(inter){ fmt.Println("empty") }else{ fmt.Println("not empty") } func IsNil(i interface{}) bool { vi := reflect.ValueOf(i) if vi.Kind() == reflect.Ptr { return vi.IsNil() } return false }
結果為 empty