时间:2021-05-22
介绍
反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言本文主要给大家介绍了Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量
前言Go语言是一门很简单的语言,它为我们做了很多的决定,比如很多在其他语言中不推荐使用的编码风格在Go是不允许的。比如:变量或者包声明或导入后没有使用是无法编译
前言Go语言作为编程语言中的后起之秀,在博采众长的同时又不失个性,在注重运行效率的同时又重视开发效率,不失为一种好的开发语言。在go语言中,没有类的概念,但是仍
前言在go语言中,自身已经集成了一定log模块,开发者可以使用go语言自身的log包(import“log”)。也有不少对自身log的开源封装。对于一些简单的开
本文实例总结了go语言中使用timer的常用方式。分享给大家供大家参考。具体分析如下:下面三段代码(A,b,C)的功能都是在5分钟后执行指定的函数的go语言代码