Go 反射零不等于零
我需要检测某个结构字段的值是否为空。Go 反射零不等于零,go,reflection,Go,Reflection,我需要检测某个结构字段的值是否为空。 在这个问题上,我找到了解决方案,但当我在操场上尝试时,操作符==和funcreflect.DeepEqual总是返回false 我做错了什么?我该如何修复它 简单的例子: func main() { s := "" v := reflect.ValueOf(s) t := reflect.TypeOf(s) zero := reflect.Zero(t) fmt.Println(zero == reflect.Ze
在这个问题上,我找到了解决方案,但当我在操场上尝试时,操作符
==
和funcreflect.DeepEqual
总是返回false
我做错了什么?我该如何修复它 简单的例子:
func main() {
s := ""
v := reflect.ValueOf(s)
t := reflect.TypeOf(s)
zero := reflect.Zero(t)
fmt.Println(zero == reflect.Zero(t)) // false
fmt.Println(v == zero) // false
fmt.Println(v == reflect.Zero(t)) // false
}
我的情况是:
type S struct {
Empty string
NotEmpty string
}
func main() {
s := S{
Empty: "",
NotEmpty: "Some text",
}
v := reflect.ValueOf(s)
for i := 0; i < v.NumField(); i++ {
field := v.Field(i)
fmt.Println(field, field == reflect.Zero(field.Type()))
}
}
你想做什么
package main
import (
"fmt"
"reflect"
)
func main() {
s := ""
v := reflect.ValueOf(s)
t := reflect.TypeOf(s)
fmt.Println(v.Interface() == reflect.Zero(t).Interface()) // true
}
就像上一个问题的答案一样,没有其他问题
为什么?
要比较两个值,请比较接口方法的结果。
对两个值使用==不会比较它们的基础值
代表
哦,我错过了。非常感谢。
package main
import (
"fmt"
"reflect"
)
func main() {
s := ""
v := reflect.ValueOf(s)
t := reflect.TypeOf(s)
fmt.Println(v.Interface() == reflect.Zero(t).Interface()) // true
}