反射的相关函数和转换|学习笔记

简介: 快速学习反射的相关函数和转换

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程反射的相关函数和转换】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/626/detail/9767


反射的相关函数和转换

 

内容介绍

一、反射的应用场景

二、反射重要的函数与概念

 

一、反射的应用场景

反射常见应用场景有以下两种

1.不知道接口调用哪个函数,根据传入参数在运行时确定调用的具体接口,这种需要对函数或方法反射。例如以下这种桥接模式,比如我前面提出问题。

Func bridge(funcptr interface{},args…interface { } )

第一个参数 funcPtr 以接口的形式传入函数指针,函数参数 args 以可变参数的形式传入,bridge 函数中可以用反射来动态执行 funcPtr 函数。

2.对结构体序列化时,如果结构体有指定 tag,也会使用到反射生成对应的字符串。

代码如下:

package main import (

"fmt"

encoding/json)

type Monster struct {

Name string `json:"monsterName"

Age int json:"monsterAge"

Sal float64 `json:"monsterSal""

Sex string `json:"monsterSex"

}

func main(){

m :=Monster{

Name :“玉兔精", Age :20,

Sal :888.99,

Sex :"female"

}

data,:=json.Marshal(m)

fmt.Println("json result:", string(data))}

 

二、反射重要的函数与概念

1.reflect.TypeOf(变量名),获取变量的类型,返回 reflect.Type 类型

2. reflect.ValueOf(变量名),获取变量的值,返回 reflect.Value 类型,reflect.Value 是一个结构体类型。【看文档】,通过 reflect.Value,可以获取到关于该变量的很多信息。

type Value

代码如下:

type Value struct {

//内含或导出字段

Value 为 go 值提供了反射接口。

func(v Value) isValid(bool

func(v Value)IsNiObool

func(v Value)Kind()Kind

func(v Value)Type()Type

func(v Value) Convert(t Type) Value

func(v Value)ElemOValue

func(v Value)Bool()bool

func(v Value)int0int64

func(v Value) Overfiowint(x int64)bool

func (vValue)UintOuint64

funcaalue)Ovetiowuint(x int64)bool

func(v Value) Float0floa164

func(v Value) OverflowFloat(x fioat64) bool

func(v Value)Complex0complex128

func(v Value) OverfiowComplex(x complex128)bool

3.变量、interface{ } 和 reflect.Value 是可以相互转换的,这点在实际开发中,会经常使用到。

变量interface{} reflect.value 的转换 .pn

变量、interface{} 和 reflectValue 是可以相互转换的,在使用反射的过程中,通常的方式是

var student stu

var num int

//专门用于做反射

func test(b interface{}) {

//1.如何将Interface))转成reflect.Value

rVal :=reflect.ValueOf(b)

//2.如何将 reflect.Value->interface()

iVal:=rVal.interface()

//3.如何将inteface)转成原来的变量类型使用类型断言 v:=iVal.(Stu)

}

图例如下:

image.png//变量通过传递参数交给一个空接口,空接口通过反射的一个函数叫 reflect.vale{},拿到了这个反射的类型 vale。通过反射的 vale 类型,可以再通过 v.infect(),再返回去变成接口。使用断言,可以使它们几个函数之间随意的进行一个切换。

资源库“value”

func(Value)Interface

代码如下:

func (v Value) Interface()(i interface{ })

本方法返回 v 当前持有的值(表示为/保管在 interfacef )类型),等价于:

代码如下:

var i interface{} = (v's underlying value)

相关文章
|
2月前
|
机器学习/深度学习 人工智能 语音技术
AI服务器怎么收费?阿里云AI云服务器支持NVIDIA A10、V100、T4、P4、P100 GPU卡费用清单
阿里云AI服务器提供NVIDIA A10/V100/T4/P4/P100等GPU实例,支持CPU+GPU/FPGA/TPU等多种异构架构,适用于AI训练、推理、科学计算等场景。价格从1503.5元/月起,含按小时、包年包月多种计费模式,性能最高达5PFLOPS。
1234 4
|
6月前
|
消息中间件 架构师 Kafka
【架构师】如何做技术选型?
技术选型无绝对优劣,关键在于“更合适”。需综合评估功能满足度、可扩展性、安全性、性能等非功能性需求,同时考量使用人数、社区活跃度、迭代速度、学习与维护成本,以及与现有技术体系的匹配度,权衡利弊后做出最优选择。
308 4
|
消息中间件 数据采集 人工智能
体育直播网站如何实现实时数据
体育直播中的实时数据如何快速、准确地传递到用户手机上?本文揭秘了这一过程:数据来源包括官方合作伙伴和AI+人工双保险;传输借助WebSocket、MQTT协议及CDN加速;高并发通过Redis缓存、消息队列与自动扩容解决。未来,AI+5G将推动实时数据向更低延迟发展,甚至实现赛事预测。代码示例展示了比赛数据处理逻辑,确保用户获得精准信息。
1041 33
|
5月前
|
存储 NoSQL Java
从单机到集群:Redis部署全攻略
本文全面解析Redis四种核心部署方式:单机版部署简单适合开发测试;主从复制实现读写分离和数据备份;哨兵模式提供自动故障转移能力;Redis Cluster集群支持分片存储和横向扩展。文章详细阐述了每种方案的原理、部署步骤、Java代码实现及适用场景,并给出生产环境选型指南。通过对比各方案优缺点,帮助开发者根据业务需求(数据量、并发量、可用性要求等)选择最佳部署方式,同时提供参数优化建议和常见问题解决方案。
415 2
|
6月前
|
消息中间件 弹性计算 关系型数据库
阿里云服务器2核8G、4核16G、8核32G配置ECS实例规格族和选型指南
阿里云2核8G、4核16G、8核32G配置推荐选用r系列(内存型)或g系列(通用型)企业级独享实例,vCPU与内存比为1:4。r系列适合Redis、内存数据库等高内存需求场景;g系列适用于Java Web、MySQL等均衡型应用。同规格族内,核数越高,网络PPS、IOPS性能越强。新购建议选新一代r8i/g8i,性能提升显著;成本敏感可选r7/g7。避免用2核8G部署重负载数据库,高并发Kafka场景优选c系列。具体配置与活动价格详见阿里云官网。
720 1
|
11月前
|
SQL 人工智能 分布式计算
大厂面试官最看重的大数据证书:让你的简历脱颖而出
不要只说"我考了XX证",要结合证书项目讲解:"在准备CCP认证时,我通过优化Hive查询将ETL任务耗时从4小时缩短到27分钟,这个方案后来被应用到..."
|
JavaScript 前端开发 Java
实现函数的柯里化
本文介绍了在JavaScript、Python和Java三种编程语言中实现函数柯里化的具体方法。JavaScript通过自定义`curry`函数实现,Python利用`functools.partial`简化过程,而Java则通过定义辅助函数达成目的。每种语言的实现细节虽有差异,但均能有效支持函数的分步参数传递与调用。
|
云安全 安全 API
“安全体检”测评:安全自动化背后的隐忧与突破
本文围绕阿里云安全检查服务展开,从技术深度、场景适配和安全边界三个维度分析其价值与短板。该服务定位为自动化风险治理工具,涵盖漏洞扫描、合规基线和配置修复。体验中发现,其优势在于云原生体系耦合、资源拓扑感知及成本效益;不足则体现在量化指标缺失和攻击面覆盖有限。改进建议包括优化风险排序、引入AI分析及提供场景化助手。文章总结,该产品在基础风险治理和合规提效上表现良好,但需强化自动化修复与业务场景适配能力,以实现从工具到平台的跃迁。
556 65
|
人工智能 自然语言处理 调度
Casevo:开源的社会传播模拟系统,基于 AI 模拟人类认知、决策和社会交互,预测社会传播现象
Casevo 是中国传媒大学推出的开源社会传播模拟系统,结合大语言模型和多智能体技术,支持复杂社会网络建模与动态交互,适用于新闻传播、社会计算等领域。
738 22
Casevo:开源的社会传播模拟系统,基于 AI 模拟人类认知、决策和社会交互,预测社会传播现象