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语言程序设计有所帮助。
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短