本文摘自网络,作者,侵删。
对于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
}
本文来自:简书
感谢作者:czaOrz
查看原文:Golang判断interface为nil
相关阅读 >>
舍弃python+c,salesforce将企业级软件全面迁移到Go语言
[Go] Golang 中main包下入口文件调用其它Go文件函数出现undefined
Golang语言社区--unity3d学习 第1期 如何学习unity3d
更多相关阅读请进入《Go》频道 >>

Go语言101
一个与时俱进的Go编程知识库。