GO语言练习:反射
列举几个反射的例子:1)简单类型反射,2)复杂类型反射,3)对反射回来的数据的可修改属性
1、简单类型反射
1.1)代码
package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 v := reflect.ValueOf(x) fmt.Println("type :", v.Type()) fmt.Println("kind is float64:", v.Kind() == reflect.Float64) fmt.Println("value:", v.Float()) }
1.2)运行结果
$ go run reflect.go type : float64 kind is float64: true value: 3.4
2、复杂类型反射
2.1)代码
1 package main 2 3 import ( 4 "fmt" 5 "reflect" 6 ) 7 8 type T struct { 9 A int 10 B string 11 } 12 13 func main () { 14 t := T{203, "mh203"} 15 s := reflect.ValueOf(&t).Elem() 16 typeOfT := s.Type() 17 for i := 0; i < s.NumField(); i++ { 18 f := s.Field(i) 19 fmt.Printf("%d: %s %s = %v\n", i, 20 typeOfT.Field(i).Name, f.Type(), f.Interface()) 21 } 22 }
2.2)运行结果
$ go run structreflect.go 0: A int = 203 1: B string = mh203
3、通过反射获得的变量的可设置属性
3.1)代码实例
1 package main 2 3 import ( 4 "fmt" 5 "reflect" 6 ) 7 8 func testA() { 9 var x float64 = 3.4 10 v := reflect.ValueOf(x) 11 if(true == v.CanSet()) { 12 fmt.Println("v is setable") 13 //v.Set(4.1) 14 } else { 15 fmt.Println("v is not setable") 16 } 17 } 18 19 func testB() { 20 var x float64 = 3.4 21 p := reflect.ValueOf(&x) 22 fmt.Println("type of p:", p.Type()) 23 fmt.Println("settablitty of p :", p.CanSet()) 24 25 v := p.Elem() 26 fmt.Println("settablitty of v:", v.CanSet()) 27 28 v.SetFloat(7.1) 29 fmt.Println(v.Interface()) 30 fmt.Println(x) 31 } 32 33 func main() { 34 testA() 35 testB() 36 }
3.2)运行结果
$ go run set.go v is not setable type of p: *float64 settablitty of p : false settablitty of v: true 7.1 7.1
作 者:fengbohello
个人网站:http://www.fengbohello.top/
E-mail : fengbohello@foxmail.com
欢迎转载,转载请注明作者和出处。
因作者水平有限,不免出现遗漏和错误。希望热心的同学能够帮我指出来,我会尽快修改。愿大家共同进步,阿里嘎多~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?