当前位置: 首页 > 编程笔记 >

Go语言中使用反射的方法

冯通
2023-03-14
本文向大家介绍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语言程序设计有所帮助。

 类似资料:
  • 本文向大家介绍Go语言中反射的正确使用,包括了Go语言中反射的正确使用的使用技巧和注意事项,需要的朋友参考一下 介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 反射有两个问题,在使用前需要三思: 大量的使用反射会损失一定性能 Clear is better than clever. Reflectio

  • 主要内容:反射的基本概念,reflect 包,反射的类型对象(reflect.Type),反射的类型(Type)与种类(Kind),指针与指针指向的元素,使用反射获取结构体的成员类型,结构体标签(Struct Tag)反射(reflection)是在 Java 出现后迅速流行起来的一种概念,通过反射可以获取丰富的类型信息,并可以利用这些类型信息做非常灵活的工作。 大多数现代的高级语言都以各种形式支持反射功能,反射是把双刃剑,功能强大但代码可读性并不理想,若非必要并不推荐使用反射。 下面我们就来将

  • 主要内容:Go语言中的类型,反射第一定律:反射可以将“接口类型变量”转换为“反射类型对象”,反射第二定律:反射可以将“反射类型对象”转换为“接口类型变量”,反射第三定律:如果要修改“反射类型对象”其值必须是“可写的”,结构体,总结反射是众多编程语言中的一个非常实用的功能,它是一种能够自描述、自控制的应用,Go语言也对反射提供了友好的支持。 Go语言中使用反射可以在编译时不知道类型的情况下更新变量,在运行时查看值、调用方法以及直接对他们的布局进行操作。 由于反射是建立在类型系统(type syst

  • 本文向大家介绍谈谈Go语言的反射三定律,包括了谈谈Go语言的反射三定律的使用技巧和注意事项,需要的朋友参考一下 简介 Reflection(反射)在计算机中表示 程序能够检查自身结构的能力,尤其是类型。它是元编程的一种形式,也是最容易让人迷惑的一部分。 虽然Go语言没有继承的概念,但为了便于理解,如果一个struct A 实现了 interface B的所有方法时,我们称之为“继承”。 类型和接口

  • 本文向大家介绍Go语言使用MySql的方法,包括了Go语言使用MySql的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言中使用MySql的方法。分享给大家供大家参考。具体如下: 此代码需要先安装mysql的go语言驱动。 首先安装mysql的go语言驱动: 示例代码如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 本文向大家介绍在Go语言中使用JSON的方法,包括了在Go语言中使用JSON的方法的使用技巧和注意事项,需要的朋友参考一下 Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: Marshal函数将会递归遍历整个对象,依次按成员类型对这个对象进行编码,类型转换规则如下: bool类型 转换为JSON的Boolean 整数,浮点数等数值类型