Go语言中反射的正确使用
发布时间:2020-12-16 19:30:18 所属栏目:大数据 来源:网络整理
导读:介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 反射有两个问题,在使用前需要三思: 大量的使用反射会损失一定性能 Clear is better than clever. Refl
介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 反射有两个问题,在使用前需要三思:
Go的类型设计上有一些基本原则,理解这些基本原则会有助于你理解反射的本质:
多说无用,下面来看示例代码 复制代码 代码如下: package main import ( "fmt" "reflect" ) type T struct { A int B string } func main() { t := T{23,"skidoo"} tt := reflect.TypeOf(t) fmt.Printf("t type:%vn",tt) ttp := reflect.TypeOf(&t) fmt.Printf("t type:%vn",ttp) // 要设置t的值,需要传入t的地址,而不是t的拷贝。 // reflect.ValueOf(&t)只是一个地址的值,不是settable,通过.Elem()解引用获取t本身的reflect.Value s := reflect.ValueOf(&t).Elem() typeOfT := s.Type() for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d: %s %s = %vn",i, typeOfT.Field(i).Name,f.Type(),f.Interface()) } } // 输出结果 // t type:main.T // t type:*main.T // 0: A int = 23 // 1: B string = skidoo 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |