Last active
August 29, 2015 14:06
-
-
Save genedna/365b9254494bfe9390e5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"reflect" // 这里引入reflect模块 | |
) | |
type User struct { | |
Name string "user name" //这引号里面的就是tag | |
Passwd string "user passsword" | |
} | |
func IsEmptyValue(v reflect.Value) bool { | |
switch v.Kind() { | |
case reflect.Array, reflect.Map, reflect.Slice, reflect.String: | |
return v.Len() == 0 | |
case reflect.Bool: | |
return !v.Bool() | |
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, reflect.Uintptr: | |
return v.Uint() == 0 | |
case reflect.Float32, reflect.Float64: | |
return v.Float() == 0 | |
case reflect.Interface, reflect.Ptr: | |
return v.IsNil() | |
} | |
return false | |
} | |
func main() { | |
user := new(User) | |
user.Name = "Edge" | |
//user.Passwd = "Tomorrow" | |
v := reflect.TypeOf(user) | |
fmt.Println(v) | |
s := reflect.TypeOf(user).Elem() //通过反射获取type定义 | |
for i := 0; i < s.NumField(); i++ { | |
fmt.Println(s.Field(i).Tag) //将tag输出出来 | |
fmt.Println(s.Field(i).Name) | |
fmt.Println(s.Field(i).Index) | |
value := reflect.ValueOf(user).Elem().Field(s.Field(i).Index[0]) | |
if IsEmptyValue(value) == false { | |
fmt.Println(value) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment