go - 从结构迭代中排除空字段

标签 go

我有一个将从用户输入中获取其值的结构。 现在我只想提取具有关联值的字段名称。不应返回具有 nil 值的字段。我该怎么做?

这是我的代码:

package main


import "fmt"
import "reflect"

type Users struct {
    Name string
    Password string
}


func main(){
    u := Users{"Robert", ""}

    val := reflect.ValueOf(u)


    for i := 0; i < val.NumField(); i++ {

        fmt.Println(val.Type().Field(i).Name)

    }


} 

当前结果:

Name
Password

预期结果:

Name

最佳答案

您需要编写一个函数来检查是否为空:

func empty(v reflect.Value) bool {
    switch v.Kind() {
    case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
        return v.Int() == 0
    case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
        return v.Uint() == 0
    case reflect.String:
        return v.String() == ""
    case reflect.Ptr, reflect.Slice, reflect.Map, reflect.Interface, reflect.Chan:
        return v.IsNil()
    case reflect.Bool:
        return !v.Bool()
    }
    return false
}

playground example .

关于go - 从结构迭代中排除空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222018/

相关文章:

go - 如何使用假客户端为 client-go 编写简单的测试?

pointers - 如何在 go 中获取字符串变量的数据指针?

go - "Memory used"公制 : Go tool pprof vs docker stats

go - 接口(interface)的同义结构字段和方法名称

使用 Golang 进行 HTML 验证

go - 如何将 uint32 转换为字符串?

go - 在 golang 中使用 ffmpeg 将 .mp4 转换为 gif

go - 向客户端发送多个响应

google-app-engine - 无法在 Google App Engine 中获取 HTTP header 属性

go - 嵌入何时使用指针