首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反映零不等于零

反映零不等于零
EN

Stack Overflow用户
提问于 2018-07-27 03:56:28
回答 1查看 286关注 0票数 1

我需要检测某些struct字段的值是空的。

this问题中,我找到了解决方案,但当我在操场上尝试时,操作符==和func reflect.DeepEqual总是返回false

我做错了什么,我该如何解决呢?

简单的例子:

代码语言:javascript
复制
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
}

我的案子:

代码语言:javascript
复制
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()))
    }
}

输出:

代码语言:javascript
复制
 false
Some text false
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 04:16:10

你想做什么

代码语言:javascript
复制
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

}

就像上一个问题中的答案一样,没有别的。

为什么?

若要比较两个值,请比较接口方法的结果。对两个值使用==并不会比较它们表示的底层值。

https://golang.org/pkg/reflect/#Value

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51550553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档