对于interface
类型的数据,不能通过简单的interface == nil
进行判断,不能会出现漏洞
func main() {
var data *byte
var in interface{}
fmt.Println(data, data == nil)
fmt.Println(in, in == nil)
in = data
fmt.Println(in, in == nil, reflect.ValueOf(in).Kind(), reflect.ValueOf(in).IsNil())
}
准确的做法是通过reflect.ValueOf
获取到目标值,如果是指针类型,则交由指针类型的方法去判断是否为nil
否则正常的赋值为空,仍旧会导致interface
非空
func IsNil(i interface{}) bool {
vi := reflect.ValueOf(i)
if vi.Kind() == reflect.Ptr {
return vi.IsNil()
}
return false
}
有疑问加站长微信联系(非本文作者)