1 回答
TA贡献1770条经验 获得超3个赞
v不是零,它包含一个*string.
但是,如果要检查反射值是否有效(非零),则可以使用val.IsValid()来检查。
另外,如果你想检查它是否为零,你可以检查if val.Kind() == reflect.Ptr && val.IsNil() {}.
一个小演示:
func main() {
var p1 *string = nil
var v interface{} = p1
// this will return an invalid value because it will return the Elem of a nil pointer.
//val := reflect.Indirect(reflect.ValueOf(v))
val := reflect.ValueOf(v) // comment this to see the difference.
if !val.IsValid() {
fmt.Printf("NULL")
} else {
if val.CanInterface() {
fmt.Printf("if is %#+v (%v)\n", val.Interface(), val.Interface() == nil)
}
}
fmt.Println(v.(*string) == nil)
}
- 1 回答
- 0 关注
- 280 浏览
添加回答
举报
