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

相关阅读 >>

基于apple m1 Golang的debug模式

学习Go 语言操作 mysql 之 预处理

Golang版本1哪年发明的

Go-锁机制

Go语言标准库之log

手撸Golang 架构设计原则 单一职责原则

Go语言 defer详解

Golang embed资源并释放resource

Go语言学习(三):源码文件

Go - 环境安装

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




打赏

取消

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

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

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

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

评论

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