我有一个int/ string/ bool/ etc ..值存储在一个interface{}并想确定它是否未初始化,这意味着它的值为
0""falsenil我该如何检查?
new*_*cct 60
根据我的理解,你想要的东西如下:
func IsZeroOfUnderlyingType(x interface{}) bool {
return x == reflect.Zero(reflect.TypeOf(x)).Interface()
}
Run Code Online (Sandbox Code Playgroud)
在谈论界面时nil,人们总是对两个截然不同且无关的事情感到困惑:
nil接口值,其是不具有一个接口值的基础值.这是接口类型的零值.nil接口值(即它具有基础值),但其基础值是其基础类型的零值.例如,底层值是nil地图,nil指针或0号等.据我所知,你在问第二件事.
更新:由于上面的代码使用==,它不适用于不具有可比性的类型.我相信使用reflect.DeepEqual()它会使它适用于所有类型:
func IsZeroOfUnderlyingType(x interface{}) bool {
return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface())
}
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 14
Go 1.13(2019 年第三季度)应该简化检测过程:
新
Value.IsZero()方法报告 Value 是否为其类型的零值。
这是在实施src/reflect/value.go,从提交c40bffd和CL 171337,解决问题7501
请参阅操场示例(只要支持 Go 1.13)
| 归档时间: |
|
| 查看次数: |
13836 次 |
| 最近记录: |