Skip to content

Instantly share code, notes, and snippets.

@genedna
Last active August 29, 2015 14:06
Show Gist options
  • Save genedna/365b9254494bfe9390e5 to your computer and use it in GitHub Desktop.
Save genedna/365b9254494bfe9390e5 to your computer and use it in GitHub Desktop.
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