当前位置: 首页 > news >正文

Go语言~反射

reflect包

  • type name和type kind
  • ValueOf
  • 通过反射获取值
  • 通过反射设置变量的值
package mainimport ("fmt""reflect"
)func reflectType(x interface{}) {obj := reflect.TypeOf(x)fmt.Println(obj, obj.Name(), obj.Kind())fmt.Printf("obj type of %T\n", obj)
}func reflectValue(x interface{}) {v := reflect.ValueOf(x)fmt.Printf("value is a %v, type is a %T\n", v, v)// 如何得到一个传入时候类型的变量k := v.Kind() // 拿到值对应的类型种类switch k {case reflect.Float32:ret := float32(v.Float())fmt.Printf("value is a %v, type is a %T\n", ret, ret)case reflect.Int32:ret := int32(v.Int())fmt.Printf("value is a %v, type is a %T\n", ret, ret)}
}func reflectSetValue(x interface{}) {v := reflect.ValueOf(x)// Elem()用来根据指针取对应的值k := v.Elem().Kind()switch k {case reflect.Int32:v.Elem().SetInt(100)case reflect.Float32:v.Elem().SetFloat(5.678)}
}type Cat struct{}type Dog struct{}func main() {/*var a float32 = 3.1415926reflectType(a)var b int8 = 10reflectType(b)// 结构体类型var c CatreflectType(c)var d DogreflectType(d)// slicevar e []stringreflectType(e)var f []intreflectType(f)*/// valueOf/*var aa int32 = 100reflectValue(aa)var bb float32 = 3.1415926reflectValue(bb)*/// setValuevar cc int32 = 10reflectSetValue(&cc)fmt.Println(cc)
}

isNil()和isValid()

package main// IsNil()常被用于判断指针是否为空;IsValid()常被用于判定返回值是否有效。import ("fmt""reflect"
)type StructField struct {// Name是字段的名字。PkgPath是非导出字段的包路径,对导出字段该字段为""Name      stringPkgPath   stringType      reflect.TypeTag       reflect.StructTagOffset    uintptrIndex     []intAnonymous bool
}func main() {// *int类型空指针var a *intfmt.Println("var a *int IsNil:", reflect.ValueOf(a).IsNil())// nil值fmt.Println("nil IsValid:", reflect.ValueOf(nil).IsValid())// 实例化一个匿名结构体b := struct{}{}// 尝试从结构体中查找"abc"字段fmt.Println("不存在的结构体成员:", reflect.ValueOf(b).FieldByName("abc").IsValid())// 尝试从结构体中查找"abc"方法fmt.Println("不存在的结构体方法:", reflect.ValueOf(b).MethodByName("abc").IsValid())// mapc := map[string]int{}// 尝试从map中查找一个不存在的键fmt.Println("map中不存在的键:", reflect.ValueOf(c).MapIndex(reflect.ValueOf("娜扎")).IsValid())
}

结构体反射

package mainimport ("fmt""reflect"
)// 结构体反射type student struct {Name  string `json:"name" ini:"s_name"`Score int    `json:"score" ini:"s_score"`
}// 给student添加两个方法 Study和Sleep(注意首字母大写)
func (s student) Study() string {msg := "好好学习,天天向上。"fmt.Println(msg)return msg
}func (s student) Sleep() string {msg := "好好睡觉,快快长大。"fmt.Println(msg)return msg
}// 根据反射获取结构体中方法的函数
func printMethod(x interface{}) {t := reflect.TypeOf(x)fmt.Println(t.NumMethod())v := reflect.ValueOf(x)// 因为下面需要拿到具体的方法去调用,所以使用的是值信息for i := 0; i < v.NumMethod(); i++ {methodType := v.Method(i).Type()fmt.Printf("method name:%s\n", t.Method(i).Name)fmt.Printf("method:%s\n", methodType)// 通过反射调用方法传递的参数必须是 []reflect.Value 类型var args = []reflect.Value{}v.Method(i).Call(args) // 调用方法}// 通过方法名获取结构体的方法// t.MethodByName("Sleep") // reflect.Method, boolmethodObj := v.MethodByName("Sleep") // reflect.Valuefmt.Println(methodObj.Type())
}func main() {stu1 := student{Name:  "枫林神",Score: 90,}/*// 通过反射区获取结构体中的所有字段信息t := reflect.TypeOf(stu1)fmt.Printf("name :%v kind :%v\n", t.Name(), t.Kind())// 遍历结构体变量的所有字段for i := 0; i < t.NumField(); i++ {//根据结构体字段的索引取字段filedobj := t.Field(i)fmt.Printf("name:%v type:%v tag:%v\n", filedobj.Name, filedobj.Type, filedobj.Tag)fmt.Println(filedobj.Tag.Get("json"), filedobj.Tag.Get("ini"))}// 根据名字取结构体中的字段filedobj2, ok := t.FieldByName("Score")if ok {fmt.Printf("name:%v type:%v tag:%v\n", filedobj2.Name, filedobj2.Type, filedobj2.Tag)}*/printMethod(stu1)
}

相关文章:

Go语言~反射

reflect包 type name和type kindValueOf通过反射获取值通过反射设置变量的值 package mainimport ("fmt""reflect" )func reflectType(x interface{}) {obj : reflect.TypeOf(x)fmt.Println(obj, obj.Name(), obj.Kind())fmt.Printf("obj type of %…...

详解交叉验证中【KFold】【Stratified-KFold】【StratifiedShuffleSplit】的区别

交叉验证是一种统计分析方法&#xff0c;它的目的是通过在同一数据集上重复并分割训练和测试数据&#xff0c;来评估机器学习模型的性能。以下是​这三种交叉验证方法的区别&#xff1a; KFold&#xff08;K-折叠&#xff09; 在KFold交叉验证中&#xff0c;原始数据集被分为K个…...

数学建模比赛中常用的建模提示词(数模prompt)

以下为数学建模比赛中常用的建模提示词&#xff0c;希望对你有所帮助&#xff01; 帮我总结一下数学建模有哪些预测类算法&#xff1f; 灰色预测模型级比检验是什么意思? 描述一下BP神经网络算法的建模步骤 对于分类变量与分类变量相关性分析用什么算法 前10年的数据分别是1&a…...

Spark 新特性+核心回顾

Spark 新特性核心 本文来自 B站 黑马程序员 - Spark教程 &#xff1a;原地址 1. 掌握Spark的Shuffle流程 1.1 Spark Shuffle Map和Reduce 在Shuffle过程中&#xff0c;提供数据的称之为Map端&#xff08;Shuffle Write&#xff09;接收数据的称之为Reduce端&#xff08;Sh…...

STM32 TIM定时器,配置,详解(1)

计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR)。 PSC预分频器&#xff0c;顾名思义&#xff0c;先预备一下分频&#xff0c;有时候频率过高&#xff0c;后面的定时器承受不住&#xff0c;就先用PSC先分频一下。如何分频的&#xff1f;将每接受到…...

Helix Toolkit:为.NET开发者带来的3D视觉盛宴

推荐一个基于.Net开源的3、功能强大的3D图形库和工具包&#xff0c;适用于WPF应用程序的3D渲染和开发。 01 项目简介 Helix Toolkit是一个开源的3D库&#xff0c;主要用于WPF应用程序。它有许多优点&#xff0c;例如提供各种各样的功能&#xff0c;包括基于MVVM的3D模型编辑器…...

PHP分类信息网站源码系统 电脑+手机+微信端三合一 带完整前后端部署教程

大家好啊&#xff01;今天源码小编来给大家分享一款PHP分类信息网站类源码系统。这款源码系统是一套专业的信息发布类网站综合管理系统&#xff0c;适合各类地方信息和行业分类站点建站。随着这几年我们国家网民爆炸式的增 长&#xff0c;网络信息也随之越来越庞大&#xff0c;…...

2023年辽宁省数学建模竞赛B题数据驱动的水下导航适配区分类预测

2023年辽宁省数学建模竞赛 B题 数据驱动的水下导航适配区分类预测 原题再现&#xff1a; “海洋强国”战略部署已成为推动中国现代化建设的重要组成部分&#xff0c;国家对此提出“发展海洋经济&#xff0c;保护海洋生态环境&#xff0c;加快建设海洋强国”的明确要求。   …...

完蛋!百融云被大阳线包围了!

没想到让AI指数爬出底部的&#xff0c;不是离婚的两口子承诺不减持了&#xff0c;而是国产游戏圈神作《完蛋&#xff01;我被女友包围了》。确实&#xff0c;资本市场不相信眼泪&#xff0c;AI的涨跌也与爱情无关。 之前有一个来自美国和澳大利亚的大数据团队做过一个有趣的统…...

数据结构 编程1年新手视角的平衡二叉树AVL从C与C++实现③

对应地&#xff0c;我们可以将insert函数中省略的操作补上 if(getBalance(node)2){ if(getBalance(node->left)1){ noderightRotate(node); //对应LL型 } else if(getBalance(node->left)-1{ node->left leftRotate(node->left); //对应LR型 noderightRotate(n…...

数据可视化PCA与t-SNE

PCA&#xff08;主成分分析&#xff09;和t-SNE&#xff08;t分布随机近邻嵌入&#xff09;都是降维技术&#xff0c;可以用于数据的可视化和特征提取。 降维&#xff1a;把数据或特征的维数降低&#xff0c;其基本作用包括&#xff1a; 提高样本密度&#xff0c;以及使基于欧…...

Kubernetes rancher、prometheus、ELK的安装

目录 一、rancher的安装1. 添加 Helm Chart 仓库2. 为 Rancher 创建命名空间3. 选择 SSL 配置4. 安装 cert-manager 二、prometheus安装三、EFK安装3.1安装elasticsearch3.2安装filebeat3.3安装kibana 一、rancher的安装 有关rancher的安装其实官方网站给的步骤已经很详细了&a…...

为什么我们要努力的学习编程?初学编程从哪里开始学起?

为什么我们要努力的学习编程&#xff1f;初学编程从哪里开始学起&#xff1f; 1、不论在哪里上班&#xff0c;都不是铁饭碗&#xff1a;现在全球经济低迷&#xff0c;使得很多企业倒闭&#xff0c;大到知名国企小到私营企业&#xff0c;大量裁员。任何人都无法保证自己现在的工…...

ffmpeg 从内存中读取数据(或将数据输出到内存)

1.为了使本文更通俗易懂&#xff0c;更新了部分内容&#xff0c;将例子改为从内存中打开。 2.增加了将数据输出到内存的方法。 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件&#xff0c;例如“C:\test.avi” 或者是一个流媒体协议的URL&#xff0c;例如“rtmp:/…...

Flink(一)【WordCount 快速入门】

前言 学完了 Hadoop、Spark&#xff0c;本想着先把 Kafka、Flume 这些工具先学完的&#xff0c;但想了想还是把核心的技术先学完最后再去把那些工具学学。 最近心有点累哈哈哈&#xff0c;偷偷立个 flag&#xff0c;反正也没人看&#xff0c;明年的今天来这里还愿哈&#xff0c…...

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…...

【大数据】Apache NiFi 数据同步流程实践

Apache NiFi 数据同步流程实践 1.环境2.Apache NIFI 部署2.1 获取安装包2.2 部署 Apache NIFI 3.NIFI 在手&#xff0c;跟我走&#xff01;3.1 准备表结构和数据3.2 新建一个 Process Group3.3 新建一个 GenerateTableFetch 组件3.4 配置 GenerateTableFetch 组件3.5 配置 DBCP…...

git怎么使用 拉取代码

废话不多说 直接开干 Git 是一款十分实用的版本控制工具&#xff0c;非常方便地管理代码的变更。但是&#xff0c;在使用 Git 过程中&#xff0c;不可避免地会遇到一些问题。其中&#xff0c;删除分支是一个常见的问题。 查看引用历史记录&#xff1a; git reflog找到你删除的…...

Apple :苹果将在明年年底推出自己的 AI,预计将随 iOS 18 一起推出

本心、输入输出、结果 文章目录 Apple &#xff1a;苹果将在明年年底推出自己的 AI&#xff0c;预计将随 iOS 18 一起推出前言三星声称库克相关图片弘扬爱国精神 Apple &#xff1a;苹果将在明年年底推出自己的 AI&#xff0c;预计将随 iOS 18 一起推出 编辑&#xff1a;简简单…...

数据结构-双向链表

1.带头双向循环链表&#xff1a; 前面我们已经知道了链表的结构有8种&#xff0c;我们主要学习下面两种&#xff1a; 前面我们已经学习了无头单向非循环链表&#xff0c;今天我们来学习带头双向循环链表&#xff1a; 带头双向循环链表&#xff1a;结构最复杂&#xff0c;一般用…...

【Python原生AOT编译终极蓝图】:2026架构设计图首次解密,3大不可逆技术拐点已至

第一章&#xff1a;Python原生AOT编译2026架构全景概览Python原生AOT&#xff08;Ahead-of-Time&#xff09;编译在2026年已演进为一套融合语言语义、运行时契约与硬件感知能力的统一基础设施。其核心目标是消除解释器开销、保障启动确定性、支持无依赖二进制分发&#xff0c;并…...

Omni-Vision Sanctuary助力后端开发:设计高并发API接口的最佳实践

Omni-Vision Sanctuary助力后端开发&#xff1a;设计高并发API接口的最佳实践 1. 高并发API接口设计的挑战与机遇 想象一下这样的场景&#xff1a;你的电商平台刚刚上线了一个基于Omni-Vision Sanctuary的智能商品描述生成功能&#xff0c;突然涌入的用户请求让你的服务器不堪…...

5步打造高效工作流:Super Productivity开源工具新手实战指南

5步打造高效工作流&#xff1a;Super Productivity开源工具新手实战指南 【免费下载链接】super-productivity Super Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitL…...

终极Axure RP汉化指南:免费获取全中文界面,3分钟轻松搞定

终极Axure RP汉化指南&#xff1a;免费获取全中文界面&#xff0c;3分钟轻松搞定 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

Retinexformer Unleashed: A Deep Dive into Transformer-Based Low-Light Image Enhancement

1. Retinexformer&#xff1a;当Transformer遇见低光图像增强 深夜拍的照片总是又暗又糊&#xff1f;Retinexformer可能是目前最聪明的AI解决方案。这个将Transformer架构与Retinex理论结合的创新模型&#xff0c;在ICCV 2023上以6dB的性能优势碾压传统方法。我实测过它的增强效…...

KubeSphere vs Kuboard:Kubernetes管理工具选型与实战对比

KubeSphere vs Kuboard&#xff1a;深度对比与选型指南 1. 开篇&#xff1a;为什么需要Kubernetes管理工具&#xff1f; 在云原生技术蓬勃发展的今天&#xff0c;Kubernetes已成为容器编排领域的事实标准。然而&#xff0c;原生Kubernetes Dashboard的功能相对基础&#xff0c;…...

亚马逊AMC数据驱动时代,选对ERP才能玩转精准投放

随着亚马逊广告生态的持续升级&#xff0c;AMC&#xff08;Amazon Marketing Cloud&#xff09;作为高阶数据分析工具&#xff0c;正成为头部卖家精细化运营的“标配”。AMC能够整合品牌在亚马逊站内外多渠道的广告与消费者行为数据&#xff0c;但其核心价值在于数据的打通与应…...

3步让旧款iOS设备重获新生:Legacy-iOS-Kit性能拯救全指南

3步让旧款iOS设备重获新生&#xff1a;Legacy-iOS-Kit性能拯救全指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

告别卡顿!Llama-3.2V-11B-cot双卡优化版,流畅体验11B大模型的视觉推理

告别卡顿&#xff01;Llama-3.2V-11B-cot双卡优化版&#xff0c;流畅体验11B大模型的视觉推理 还在为多模态大模型运行卡顿而烦恼&#xff1f;今天要介绍的Llama-3.2V-11B-cot双卡优化版&#xff0c;将彻底改变你对11B参数大模型的认知。这个经过深度优化的视觉推理工具&#…...

利用快马平台十分钟搭建worldmonitor数据监控原型

最近在做一个全球数据监控的小项目&#xff0c;需要快速验证原型效果。传统开发流程从环境搭建到功能实现至少需要几天时间&#xff0c;但这次尝试用InsCode(快马)平台后&#xff0c;十分钟就搭出了可运行的worldmonitor原型。分享下具体实现思路和操作体验&#xff1a; 明确核…...