package main
import "fmt"
func main(){
var frank map[string]string = nil
var person interface{} = frank
if person == nil {
fmt.Println("person is nil")
} else {
fmt.Println("person isn't nil")
}
}
輸出:person isn't nil
原因:interface{}類型對應(yīng)Iface,其定義如下:
struct Iface {
Itab* tab;
void* data;
};
其中贤惯,Itab定義如下:
struct Itab {
InterfaceType* inter;
Type* type;
Itab* link;
int32 bad;
int32 unused;
void (*fun[])(void);
};
只有當(dāng)Iface的tab與data均為nil時洼专,interface{}才等于nil
Eface用于反射,其定義如下:
struct Eface{
Type* type;
void* data;
};