bool指针如何赋值_Golang的反射是如何实现的?图解其实现原理

更新时间:2023-06-22 00:59:04 阅读: 评论:0

bool指针如何赋值_Golang的反射是如何实现的?图解其实现
原理
Go反射的实现与 interface和 unsafe.Pointer密切相关。(本⽂的部署环境是 Go 1.12.9)。
interface回顾
⾸先我们简单回顾⼀下 interface 的结构,总体上是:
户外活动大班
细分下来分为有函数的 iface 和⽆函数的 eface(就是 interface{});
⽆函数的 eface
鲁滨孙漂流记好词
有函数的 iface
鉴定化工紫砂壶静态类型(static interface type)和动态混合类型(dynamic concrete type)
Go语⾔中,每个变量都有唯⼀个静态类型,这个类型是编译阶段就可以确定的。有的变量可能除了静态类型之外,还会有动态混合类型。
例如以下例⼦:
//带函数的interfacevar r io.Reader tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0)if err != nil {    return nil, err}r = tty//不带函数的interfacevar empty interface{}em 有函数的 iface的例⼦
中国经典童话故事我们⼀句⼀句来看:第1⾏, varr io.Reader
第4⾏⾄第7⾏就是简单的赋值,得到⼀个 *os.File的实例,暂且不看了。
最后⼀句 r=tty
我们接着往下看, varemptyinterface{}向日葵生长周期
最后是 empty=tty
但是记住:虽然有动态混合类型,但是对外"表现"依然是静态类型。
Go反射简介
Go反射有三⼤法则:
//接⼝数据  =====》反射对象1. Reflection goes from interface value to reflection object.//反射对象 ===> 接⼝数据2. Reflection goes from reflection object to interf Go 的反射就是对以上三项法则的实现。
Go的反射主要由两部分组成:Type和 Value, Type和 Value是俩结构体:(这俩结构体具体内容可以略过不看,知道有这回事⼉就⾏了)
Type:
type Type interface {    Align() int    FieldAlign() int    Method(int) Method    MethodByName(string) (Method, bool)    NumMethod() int    Name() string    Pk Value:
type Value struct {    typ *rtype    ptr unsafe.Pointer    flag}
你会发现反射的实现和interface的组成很相似,都是由“类型”和“数据值”构成,但是值得注意的是:interface的“类型”和“数据
值”是在“⼀起的”,⽽反射的“类型”和“数据值”是分开的。
送元二使安西古诗带拼音Type和 Value提供了⾮常多的⽅法:例如获取对象的属性列表、获取和修改某个属性的值、对象所属结构体的名字、对象的底层类型(underlying type)等等龙猫电脑壁纸
Go中的反射,在使⽤中最核⼼的就两个函数:
reflect.TypeOf(x)
reflect.ValueOf(x)
这两个函数可以分别将给定的数据对象转化为以上的 Type和 Value。这两个都叫做 反射对象
Reflection goes from interface value to reflection object(法则⼀)
给定⼀个数据对象,可以将数据对象转化为反射对象 Type和 Value。
⽰例代码:
package mainimport (    "fmt"    "reflect")func main() {    var x float64 = 3.4    t := reflect.TypeOf(x)    v :
= reflect.ValueOf(x)    fmt.Println("type:", t)  //type: fl 由代码第17⾏可以看出:Value还可以获取到当前数据值的 Type。所以,法则⼀的图应为:
Reflection goes from reflection object to interface value.(法则⼆)
给定的反射对象,可以转化为某种类型的数据对象。即法则⼀的逆向。
五年级第四单元作文

本文发布于:2023-06-22 00:59:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1009730.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   类型   反射   数据   静态   实现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图