我有一个从用户输入中获取其值的结构。
现在我想只提取具有关联值的字段名称。不应返回具有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
答案 0 :(得分:4)
您需要编写一个函数来检查空:
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
}
答案 1 :(得分:0)
我想我找到了解决方案。案件结案。 :)
import "fmt"
import "reflect"
type Users struct {
Name string
Password string
}
func main(){
u := Users{"robert", ""}
val := reflect.ValueOf(u)
var fFields []string
for i := 0; i < val.NumField(); i++ {
f := val.Field(i)
if f.Interface() != "" {
fFields = append(fFields, val.Type().Field(i).Name)
}
}
fmt.Println(fFields)
}