Go语言中使用反射的方法
发布时间:2020-12-16 19:34:22 所属栏目:大数据 来源:网络整理
导读:本篇章节讲解Go语言中使用反射的方法。供大家参考研究。具体实现方法如下: 复制代码 代码如下: // Data Model type Dish struct { Id int Name string Origin string Query func() } 创建实例如下: 复制代码 代码如下: shabushabu = Dish.new shab
本篇章节讲解Go语言中使用反射的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下: // Data Model
type Dish struct { Id int Name string Origin string Query func() } 创建实例如下: 复制代码 代码如下: shabushabu = Dish.new
shabushabu.instance_variables # => [] shabushabu.name = "Shabu-Shabu" shabushabu.instance_variables # => ["@name"] shabushabu.origin = "Japan" shabushabu.instance_variables # => ["@name","@origin"] 完整代码如下: 复制代码 代码如下: package main
import( "fmt" "reflect" ) func main(){ // iterate through the attributes of a Data Model instance for name,mtype := range attributes(&Dish{}) { fmt.Printf("Name: %s,Type %sn",name,mtype.Name()) } } // Data Model type Dish struct { Id int Name string Origin string Query func() } // Example of how to use Go's reflection // Print the attributes of a Data Model func attributes(m interface{}) (map[string]reflect.Type) { typ := reflect.TypeOf(m) // if a pointer to a struct is passed,get the type of the dereferenced object if typ.Kind() == reflect.Ptr{ typ = typ.Elem() } // create an attribute data structure as a map of types keyed by a string. attrs := make(map[string]reflect.Type) // Only structs are supported so return an empty result if the passed object // isn't a struct if typ.Kind() != reflect.Struct { fmt.Printf("%v type can't have attributes inspectedn",typ.Kind()) return attrs } // loop through the struct's fields and set the map for i := 0; i < typ.NumField(); i++ { p := typ.Field(i) if !p.Anonymous { attrs[p.Name] = p.Type } } return attrs } 希望本文所述对大家的Go语言程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |