15.Golang中的反射机制及应用

news/2024/12/22 14:09:21/

目录

  • 概述
  • 实践
    • 基本应用
    • 复杂应用
  • 结束

概述

Golang中的反射用法还是比较简单的

  • reflect.TypeOf(arg)
  • reflect.ValueOf(arg)

实践

基本应用

package mainimport ("fmt""reflect"
)func reflectNum(arg interface{}) {fmt.Println("type = ", reflect.TypeOf(arg))fmt.Println("value = ", reflect.ValueOf(arg))
}func main() {var num float64 = 1.2345reflectNum(num)}

结果如下:
在这里插入图片描述

复杂应用

package mainimport ("fmt""reflect"
)type User struct {Id   intName stringAge  int
}func (this *User) Call() {fmt.Println("user is called...")fmt.Printf("详细:v%\n", this)
}func (this User) Call2() {fmt.Println("user is called...")fmt.Printf("详细:v%\n", this)
}func DoFieldAndMethod(arg interface{}) {// 获取 arg 的 typeargType := reflect.TypeOf(arg)fmt.Println("argType is:", argType.Name())// 获取 arg 的 valueargValue := reflect.ValueOf(arg)fmt.Println("argValue is:", argValue)// 通过 type 获取字段for i := 0; i < argType.NumField(); i++ {field := argType.Field(i)value := argValue.Field(i).Interface()fmt.Printf("%s:%v  %v \n", field.Name, field.Type, value)}fmt.Println("分隔 ...")// 通过 type 获取方法调用for i := 0; i < argType.NumMethod(); i++ {m := argType.Method(i)fmt.Printf("%s: %s% \n", m.Name, m.Type)}fmt.Println("分隔 ...反射调用方法")for i := 0; i < argValue.NumMethod(); i++ {argValue.Method(i).Call(nil)}
}func main() {user := User{1, "张三", 19}DoFieldAndMethod(user)
}

结果如下:
在这里插入图片描述

结束

Golang中的反射机制及应用 至此结束,如有疑问,欢迎评论区留言。


http://www.ppmy.cn/news/1338672.html

相关文章

Vue学习笔记(二)快速入门

Vue学习笔记&#xff08;二&#xff09;快速入门 vue小试牛刀 hello-vue3.html <body><div id"app"><h1>{{msg}}</h1></div><script type"module">import {createApp} from https://unpkg.com/vue3/dist/vue.esm-b…

c# cass10 获取宗地内所有封闭线段的面积

获取面积的主要流程如下&#xff1a; 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象。创建一个选择过滤器&#xff0c;限制用户只能选择"宗地"图层上的LWPOLYLINE对象作为外部边界。提示用户根据上述规则进行实体选择&#xff0c;并获取选择结果。检查用户是…

Linux第39步_创建正点原子的uboot工作区和使用脚本编译

先看答案&#xff0c;再做题&#xff0c;为移植uboot做好充足的准备。这里需要修改两个“Makefile”文件&#xff0c;路数变了。 一、uboot移植前需要了解的相关知识 1、正点原子的uboot设备树文件。 路径如下&#xff1a; “uboot/alientek_uboot/arch/arm/dts/” 文件如…

LeetCode: 189.轮转数组

本篇目标了解&#xff0c;翻转数组的经典解法&#xff0c; 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 目录 基本方法概述&#xff1a; 1&#xff0c;翻转做法&#xff0c;推荐时O&#xff08;n&#xff09;&#xff0c;空&#xff08;1&#xff09; 2&#x…

Excel-Apache POI

Apache POI是用Java编写的免费开源的跨平台的Java API&#xff0c;Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能&#xff0c;其中使用最多的就是使用POI操作Excel文 件。 Apache POI常用的类 HSSF &#xff0d; 提供读写Microsoft Excel XLS格式档案…

使用golang发送邮件

目前大多应用都是手机登录&#xff0c;但是作为开源的一个软件&#xff0c;或者是私有的一个应用&#xff0c;那么使用手机短信接收验证码成本比较高&#xff0c;使用邮箱相对更容易&#xff0c; 这里从tinode中取出发邮件的部分做一个测试&#xff0c; 其中邮箱一般需要设置…

Cache Lab:Part A【模拟出使用LRU策略的高速缓存存储器组织结构】

目录 任务描述 知识回顾 实验内容 测试结果 Cache Lab 对应《CS:APP》6.3节至第六章结束的内容。 任务描述 Your job for Part A is to fill in the csim.c file so that it takes the same command line arguments and produces the identical output as the reference …

Django如何调用机器学习模型进行预测

Django是一个流行的Python Web框架,它可以很方便地集成机器学习模型,进行预测和推理。我将介绍如何在Django项目中调用训练好的机器学习模型,并实现一个预测接口。 准备工作 首先我们需要一个训练好的机器学习模型。这里我们使用Scikit-Learn训练一个简单的线性回归模型作为示…