go语言的魔幻旅程14-反射

go语言的魔幻旅程14-反射,第1张

概述以铜为镜可以正衣冠,以史为镜可以知兴衰历史的车轮总是滚滚向前,永不停息。公道自在人心,不管谎言如何美丽,最终都会被戳破,总幻想着颐指气使的居高临下的态度来指教他人,首先必须反思下自身到底有没有资格给别人上课,现在的历史不是一百二十年前的历史,幻想着几尊大炮占领一个国家 以铜为镜可以正衣冠,以史为镜可以知兴衰

历史的车轮总是滚滚向前,永不停息。公道自在人心,不管谎言如何美丽,最终都会被戳破,总幻想着颐指气使的居高临下的态度来指教他人,首先必须反思下自身到底有没有资格给别人上课,现在的历史不是一百二十年前的历史,幻想着几尊大炮占领一个国家的时代已然成为历史,总抱着一百多年前的旧思维与我们打交道是行不通的,指三说四也是不行的,惹怒了也是不惹的,最终还是会为自己的愚蠢行为付出相应的代价。


反射

1、什么是发射?

反射说的简单点就是程序在运行的过程中,通过某种方式能够获取变量的类型和值,这种方式就称之为反射。而go语言中的反射主要是通过reflect包实现的,其中reflect.TypeOf()和reflect.ValueOf分别返回reflect.Type和reflect.Value。

type order struct {    ordID      int    customerID int}func createquery(q interface{}) {    t := reflect.TypeOf(q)    v := reflect.ValueOf(q)    fmt.Println("Type ", t)    fmt.Println("Value ", v)}func main() {    o := order{        ordID:      456,        customerID: 56,    }    createquery(o)}

2、reflect.Type和reflect.Kind的区别

reflect.Type和reflect.Kind的区别是前者表示实际类型,而后者表示该类型的特定的类别

//举个栗子type order struct {    ordID      int    customerID int}func createquery(q interface{}) {    t := reflect.TypeOf(q)    k := t.Kind()    fmt.Println("Type ", t)    fmt.Println("Kind ", k)}func main() {    o := order{        ordID:      456,        customerID: 56,    }    createquery(o)}//输出的结果为Type  main.orderKind  struct

3、NumFIEld()和FIEld()方法

NumFIEld方法返回结构体中字段的数量,而FIEld(i int)方法返回i的reflect.Value。

//举个栗子type order struct {    ordID      int    customerID int}func createquery(q interface{}) {    if reflect.ValueOf(q).Kind() == reflect.Struct {        v := reflect.ValueOf(q)        fmt.Println("Number of fIElds", v.NumFIEld())        for i := 0; i < v.NumFIEld(); i++ {            fmt.Printf("FIEld:%d type:%T value:%v\n", i, v.FIEld(i), v.FIEld(i))        }    }}func main() {    o := order{        ordID:      456,        customerID: 56,    }    createquery(o)}

输出:
Number of fIElds 2
FIEld:0 type:reflect.Value value:456
FIEld:1 type:reflect.Value value:56

4、Int和String方法

Int和String可以帮助我们分别提取reflect.Value作为int64和string.

//举个栗子func main() {    a := 56    x := reflect.ValueOf(a).Int()    fmt.Printf("type:%T value:%v\n", x, x)    b := "Naveen"    y := reflect.ValueOf(b).String()    fmt.Printf("type:%T value:%v\n", y, y)}

输出:
type:int64 value:56
type:string value:Naveen


总结

反射这部分的内容知识点讲解的比较少,算是比较容易掌握的知识点,作为一名优秀的编程从业人员必须拿下这部分的内容,目前的教程中没有添加实际的应用场景,可能随着学习的深入后期会补充一些实际的应用场景案例。

总结

以上是内存溢出为你收集整理的go语言的魔幻旅程14-反射全部内容,希望文章能够帮你解决go语言的魔幻旅程14-反射所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1244321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存