来源:自学PHP网 时间:2019-08-07 16:47 作者:小飞侠 阅读:次
[导读] Go语言中反射的正确使用...
介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是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:%v\n", tt) ttp := reflect.TypeOf(&t) fmt.Printf("t type:%v\n", 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 = %v\n", 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 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com