package main
import (
"fmt"
"reflect"
)
type User struct {
Id int
Name string
Age int
}
func (this *User) Call() {
fmt.Println("user is called...")
fmt.Println("%v\n",this)
}
func main() {
user := User{1,"AceId",18}
DoFileAndMethod(user)
}
func DoFileAndMethod(input interface{}) {
//获取input的type
intputType := reflect.TypeOf(input)
fmt.Println("inputType is:",intputType)
//获取input的value
inputValue := reflect.ValueOf(input)
fmt.Println("inputValue is :",inputValue)
//通过type获取里面的字段
//1、获取interface的reflect.type,通过Type得到Numfiled,进行遍历
//2、得到每个field,数据类型
//3、通过field有一个Interface()方法得到对应的value
for i :=0;i<intputType.NumField();i++ {
field := intputType.Field(i)
value := inputValue.Field(i).Interface()
fmt.Printf("%s: %v = %v\n",field,field.Type,value)
}
//通过Type获取里面的 方法,调用
for i :=0;i < intputType.NumMethod();i++ {
m := intputType.Method(i)
fmt.Println("%s: %v\n",m.Name,m.Type)
}
}
文章来源地址https://www.toymoban.com/news/detail-820765.html
文章来源:https://www.toymoban.com/news/detail-820765.html
到了这里,关于go语言(十五)----reflect的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!