源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Go语言中使用反射的方法

  • 时间:2021-11-11 03:35 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Go语言中使用反射的方法
本文实例讲述了Go语言中使用反射的方法。分享给大家供大家参考。具体实现方法如下:
[u]复制代码[/u] 代码如下:
// Data Model type Dish struct {   Id  int   Name string   Origin string   Query func() }
创建实例如下:
[u]复制代码[/u] 代码如下:
shabushabu = Dish.new shabushabu.instance_variables # => [] shabushabu.name = "Shabu-Shabu" shabushabu.instance_variables # => ["@name"] shabushabu.origin = "Japan" shabushabu.instance_variables # => ["@name", "@origin"]
完整代码如下:
[u]复制代码[/u] 代码如下:
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 %s\n", 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 inspected\n", 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语言程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部