我有一个将从用户输入中获取其值的结构。\n现在我只想提取具有关联值的字段名称。nil不应返回具有值的字段。我怎样才能做到这一点?
这里\xe2\x80\x99是我的代码:
\n\npackage main\n\n\nimport "fmt"\nimport "reflect"\n\ntype Users struct {\n Name string\n Password string\n}\n\n\nfunc main(){\n u := Users{"Robert", ""}\n\n val := reflect.ValueOf(u)\n\n\n for i := 0; i < val.NumField(); i++ {\n\n fmt.Println(val.Type().Field(i).Name)\n\n }\n\n\n} \nRun Code Online (Sandbox Code Playgroud)\n\n当前结果:
\n\nName\nPassword\nRun Code Online (Sandbox Code Playgroud)\n\n预期结果:
\n\nName\nRun Code Online (Sandbox Code Playgroud)\n
小智 5
您需要编写一个函数来检查是否为空:
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
}
Run Code Online (Sandbox Code Playgroud)