Go语言中使用反射的方法
作者:不吃皮蛋 发布时间:2023-07-22 22:31:48
标签: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语言程序设计有所帮助。


猜你喜欢
- 在MySQL中,事务就是一个逻辑工作单元的一系列步骤。事务是用来保证数据操作的安全性。事务的特征:1.Atomicity(原子性)2.Con
- 通过@classmethod 实现多态1.概述python中通常使用对象创建多态模式,python还支持类创建多态模式。下面通过一个例子展示
- 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生。这种查询在SQL Server 2005之前,写起
- 前言这篇文章主要给大家总结了关于学习Python的新手们容易犯的几个错误,一共四个易犯错误,下面来看看详细的介绍吧。一、i+=1 不等于++
- 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率。编程世界里有各种各样的
- 导语哈喽吖铁汁萌!今天这期就给大家介绍几个我用到的办公室自动化技巧,可以瞬速提高办公效率。有需要的可以往下滑了1、Word文档doc转doc
- enumerate函数用于遍历序列中的元素以及它们的下标。enumerate函数说明:函数原型:enumerate(sequence, [s
- 1 概述C/C++和Java(以及大多数的主流编程语言)都有自己成熟的单元测试框架,前者如Check,后者如JUnit,但这些编程框架本质上
- 问题最近,在用SSH框架完成一个实践项目时,碰到了一个莫名其妙的Bug困扰了我好久,最后终于解决,记录如下。问题:同学在测试系统的时候突然发
- python中的列表和元组# 1.列表的格式# [数据1,数据2,数据3,···]# 列表 可变数据类型# 列表可以存储多个数据,数据之间的
- 1.1 方法归纳使用 + 直接将多列合并为一列(合并列较少);使用pandas.Series.str.cat方法,将多列合并为一列(合并列较
- 本文实例讲述了PHP实现上传文件并存进数据库的方法。分享给大家供大家参考。具体如下:show_add.php文件如下:<?php &n
- 1 元组同一元组中元素的数据类型可以不同元组中只包含一个元素时,需要在元素后面添加逗号,否则圆括号会被当做运算符使用元组的创建:赋值命令=或
- 本文实例为大家分享了Python实现学生管理系统的具体代码,供大家参考,具体内容如下实现从面向过程到面向对象的过度,通过更改前面的学生管理系
- 前些日子有网友问:将ASP纪录集输出成n列的的表格形式显示的方法?现在写了一个,方便大家使用。'定义变量 Dim cn,r
- 若是只引用jquery的话,监听单选按钮改变事件如下:<input type="radio" name="
- 本文实例讲述了Python面向对象之类的定义与继承用法。分享给大家供大家参考,具体如下:定义一个类类中的方法同,类外方法,默认传self值类
- --====================================================================
- <%@ Page Language="C#" AutoEventWireup="true" C
- asp连接sql server代码如下:dim connset conn = Serve