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语言程序设计有所帮助。