Go语言中使用反射的方法
本文实例讲述了Go语言中使用反射的方法。分享给大家供大家参考。具体实现方法如下:
//DataModel
typeDishstruct{
Id int
Namestring
Originstring
Queryfunc()
}
创建实例如下:
shabushabu=Dish.new shabushabu.instance_variables#=>[] shabushabu.name="Shabu-Shabu" shabushabu.instance_variables#=>["@name"] shabushabu.origin="Japan" shabushabu.instance_variables#=>["@name","@origin"]
完整代码如下:
packagemain
import(
"fmt"
"reflect"
)
funcmain(){
//iteratethroughtheattributesofaDataModelinstance
forname,mtype:=rangeattributes(&Dish{}){
fmt.Printf("Name:%s,Type%s\n",name,mtype.Name())
}
}
//DataModel
typeDishstruct{
Id int
Namestring
Originstring
Queryfunc()
}
//ExampleofhowtouseGo'sreflection
//PrinttheattributesofaDataModel
funcattributes(minterface{})(map[string]reflect.Type){
typ:=reflect.TypeOf(m)
//ifapointertoastructispassed,getthetypeofthedereferencedobject
iftyp.Kind()==reflect.Ptr{
typ=typ.Elem()
}
//createanattributedatastructureasamapoftypeskeyedbyastring.
attrs:=make(map[string]reflect.Type)
//Onlystructsaresupportedsoreturnanemptyresultifthepassedobject
//isn'tastruct
iftyp.Kind()!=reflect.Struct{
fmt.Printf("%vtypecan'thaveattributesinspected\n",typ.Kind())
returnattrs
}
//loopthroughthestruct'sfieldsandsetthemap
fori:=0;i<typ.NumField();i++{
p:=typ.Field(i)
if!p.Anonymous{
attrs[p.Name]=p.Type
}
}
returnattrs
}
希望本文所述对大家的Go语言程序设计有所帮助。