本文实例讲述了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 %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语言程序设计有所帮助。

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。