Golang判断interface为nil


本文摘自网络,作者,侵删。

对于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语言

图文讲解Godoc的安装与使用

[Go] Golang 中main包下入口文件调用其它Go文件函数出现undefined

Golang chan是否关闭

Go语言————3、编辑器、集成开发环境与其它工具

Go微服务框架Go-micro整体架构介绍

windows10下编译Go项目为linux可执行文件

Golang最适合做什么

[译] 使用 Go 语言编写一个简单的 shell

Golang语言社区--unity3d学习 第1期 如何学习unity3d

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...