hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

golang反射重要吗_后端开发

2019-12-04后端开发ki4网16°c
A+ A-

Golang供应了一种机制,在编译时不晓得范例的情况下,可更新变量、运行时检察值、挪用要领以及直接对他们的规划举行操纵的机制,称为反射。

为何运用反射? (引荐进修:go)

打个比方,有时刻我们须要一个函数能够处置惩罚各种范例的值。在不晓得范例的情况下,你大概会这么写:

// 伪代码
switch value := value.(type) {
case string:
    // ...一些操纵
case int:   
    // ...一些操纵  
case cbsStruct: // 自定义的构造体  
    // ...一些操纵

// ...
}

有没发明什么问题?

这边存在一个问题:范例许多,这个函数会写的异常长,而且还大概存在自定的范例,也就是说这个推断往后大概还要一向改,由于没法晓得未知值究竟属于什么范例。

没法透视一个未知范例的时刻,以上代码实在不是很合理,这时刻就须要有反射来帮助你处置惩罚,反射运用TypeOf和ValueOf函数从接口中猎取目标对象的信息,轻松完成目标。

3.反射细致能做什么?

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var name string = "咖啡色的羊驼"

    // TypeOf会返回目标数据的范例,比方int/float/struct/指针等
    reflectType := reflect.TypeOf(name)

    // valueOf返回目标数据的的值,比方上文的"咖啡色的羊驼"
    reflectValue := reflect.ValueOf(name)

    fmt.Println("type: ", reflectType)
    fmt.Println("value: ", reflectValue)
}

golang中供应了reflect包对反射的支撑,个中重要的有两个要领和两个struct(正确的说是一个struct和一个interface),用来离别猎取和操纵接口变量的动态范例和动态值。

两个要领:

func TypeOf(i interface{}) Type {...} 该要领吸收一个空接口范例的变量,实参会被复制一份,并转换为空接口变量,终究作为TypeOf的参数。

在函数内部会将接口变量的动态范例信息掏出,并封装到reflect.Type返回,由于reflect.Type是一个接口,真正运用的是接口的实例,在这里真正的实例是reflect.rtype。

func ValueOf(i interface{}) Value {...} 与TypeOf 函数范例,吸收的也是一个副本,然后转为空接口变量,在要领内部掏出接口变量的动态值,然后封装为一个reflect.Value对象返回。

以上就是golang反射重要吗的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
golang反射重要吗_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>