1. 程式人生 > 實用技巧 >go中interface{}判nil

go中interface{}判nil

在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