企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 基本介绍 1. 反射可以在运行时动态获取变量的各种信息,比如变量的类型type,类别kind 2. 如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法) 3. 通过反射,可以修改变量的值,可以调用关联的方法 4. 使用反射,需要import("reflect") ## 功能 1. 从接口实例获取值 2. 从值获取接口(空接口) 3. 从接口实例获取值后改变这个值 ## 重要函数和概念 1. reflect.TypeOf(变量名),获取变量的类型,返回reflect.Type类型 2. reflect.ValueOf(变量名),获取变量的值,返回reflect.Value类型,reflect.Value是一个结构体类型,通过reflect.Value可以获取到关于该变量的很多信息 3. 变量、interface{}和reflect.Value是可以相互转换的 ## 示意图 ![](https://img.kancloud.cn/ff/42/ff4244cde6256c60f1922af0a2f326a3_1348x679.png) ![](https://img.kancloud.cn/21/7b/217b894ac8e369ad3b7a2dd28fb45a77_633x384.png) ## 注意事项 1. reflect.Value.Kind,获取变量的类别,返回的是一个常量 2. Type是类型,Kind是类别,Type和Kind可能是相同,也可能不同。如:int的Type是**int**,Kind也是**int**;struct的Type是**包.结构体名**,kind是**struct** 3. 通过反射可以让变量在interface{}和reflect.value中相互转换 4. 使用反射的方式来获取变量的值,要求数据类型匹配。比如x是int,则需要`reflect.ValueOf(x).Int()`,也可以使用断言 5. 通过反射来修改变量,主要当使用SetXXX方法来设置需要通过对应的指针类型来完成,这样才能改变传入的变量的值,同时需要使用到reflect.value.Elem()方法 ![](https://img.kancloud.cn/32/d9/32d9bfb56a9f88626f35d8e36e509ac7_1143x428.png)