反射机制基本和Java等类似,可获取struct或变量的类型 值等信息。获取或修改对象的值时,一定要判断该属性是否为可操作状态,否则会导致错误。
示例代码如下:
package main import ( "fmt" "reflect" ) ///首字母大写表示该字段可导出,并可修改值 type User struct { ID int name string //未导出 Age int } func (u User) Info() { fmt.Println(u) } func GetInfo(o interface{}) { t := reflect.TypeOf(o) fmt.Println(t.Name()) v := reflect.ValueOf(o) for i := 0; i < t.NumField(); i++ { f := t.Field(i) fmt.Printf("%s\n", f.Name) if v.Field(i).CanInterface() { //此处name未导出,所以获取Interface的时候会提示错误 val := v.Field(i).Interface() fmt.Printf("%s:%v=%v\n", f.Name, f.Type, val) } } } func main() { user1 := User{222, "Charles", 100} GetInfo(user1) }
有疑问加站长微信联系(非本文作者)