Go语言中使用反射的方法

 更新时间:2015年02月20日 16:05:24   作者:不吃皮蛋  
这篇文章主要介绍了Go语言中使用反射的方法,实例分析了Go语言实现反射的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

相关文章

  • Golang中常见的三种并发控制方式使用小结

    Golang中常见的三种并发控制方式使用小结

    这篇文章主要为大家详细介绍了如何对goroutine并发行为的控制,在Go中最常见的有三种方式:sync.WaitGroup、channel和Context,下面我们就来看看他们的具体使用吧
    2024-01-01
  • golang pprof监控memory block mutex统计原理分析

    golang pprof监控memory block mutex统计原理分析

    这篇文章主要为大家介绍了golang pprof监控memory block mutex统计原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Golang 读取并解析SQL文件的实现方法

    Golang 读取并解析SQL文件的实现方法

    本文介绍了如何使用Go语言编写一个简单的函数,用于读取并解析SQL文件,通过一个函数,我们可以轻松地将SQL文件中的语句提取出来,进行后续的操作,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • Golang Gin解析JSON请求数据避免出现EOF错误

    Golang Gin解析JSON请求数据避免出现EOF错误

    这篇文章主要为大家介绍了Golang Gin 优雅地解析JSON请求数据,避免ShouldBindBodyWith出现EOF错误的源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Golang 如何限制木马图片上传服务器的实例

    Golang 如何限制木马图片上传服务器的实例

    本文主要介绍了Golang 如何限制木马图片上传服务器的实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Go语言使用ioutil.ReadAll函数需要注意基本说明

    Go语言使用ioutil.ReadAll函数需要注意基本说明

    这篇文章主要为大家介绍了Go语言使用ioutil.ReadAll函数需要注意基本说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • GO语言实现列出目录和遍历目录的方法

    GO语言实现列出目录和遍历目录的方法

    这篇文章主要介绍了GO语言实现列出目录和遍历目录的方法,涉及ioutil.ReadDir()与filepath.Walk()的应用,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • golang 基于 mysql 简单实现分布式读写锁

    golang 基于 mysql 简单实现分布式读写锁

    这篇文章主要介绍了golang 基于mysql简单实现分布式读写锁,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 一篇文章搞懂Go语言中的Context

    一篇文章搞懂Go语言中的Context

    这篇文章主要介绍了一篇文章搞懂Go语言中的Context,Context携带一个截止日期、一个取消信号和其他跨越API边界的值。上下文的方法可以被多个gor例程同时调用
    2022-07-07
  • 使用golang脚本基于kubeadm创建新的token(问题分析)

    使用golang脚本基于kubeadm创建新的token(问题分析)

    这篇文章主要介绍了使用golang脚本基于kubeadm创建新的token(问题分析),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10

最新评论