当前位置: 首页 > news >正文

网站建站公司一站式服务重庆室内设计公司

网站建站公司一站式服务,重庆室内设计公司,网站的域名怎么看,行业门户网站案例分析在 go 语言中#xff0c;实现反射能力的是 reflect包#xff0c;能够让程序操作不同类型的对象。其中#xff0c;在反射包中有两个非常重要的 类型和 函数#xff0c;两个函数分别是#xff1a; reflect.TypeOfreflect.ValueOf 两个类型是 reflect.Type 和 reflect.Value…在 go 语言中实现反射能力的是 reflect包能够让程序操作不同类型的对象。其中在反射包中有两个非常重要的 类型和 函数两个函数分别是 reflect.TypeOfreflect.ValueOf 两个类型是 reflect.Type 和 reflect.Value它们与函数是一一对应的关系 使用场景map和struct的相互转化json序列化ORM框架rpc服务的注册和调用 1 Type 和 TypeOf reflect.Type 类型是一个接口类型内部指定了若干方法通过这些方法我们可以获取到反射类型的各种信息例如字段、方法等 使用 reflect.TypeOf() 函数可以获取将任意值的类型对象 (reflect.Type)程序通过类型对象可以访问任意值的类型信息 func main() {type MyInt inttype cat struct {Name stringType int json:type id:100}inst : cat{Name: mimi, Type: 1}typeOfCat : reflect.TypeOf(inst)// 显示反射类型对象的名称和种类fmt.Println(typeOfCat.Name(), typeOfCat.Kind())for i : 0; i typeOfCat.NumField(); i {// 获取每个成员的结构体字段类型fieldType : typeOfCat.Field(i)// 输出成员名和tagfmt.Printf(name: %v tag: %v\n, fieldType.Name, fieldType.Tag)}// 通过字段名, 找到字段类型信息if catType, ok : typeOfCat.FieldByName(Type); ok {// 从tag中取出需要的tagfmt.Println(catType.Tag.Get(json), catType.Tag.Get(id))}var Zero MyInt// 获取Zero常量的反射类型对象typeOfA : reflect.TypeOf(Zero)// 显示反射类型对象的名称和种类fmt.Println(typeOfA.Name(), typeOfA.Kind()) }2 Value 和 ValueOf reflect.Value 类型是一个结构体封装了反射对象的值内部若干方法可以通过这些方法来获取和修改对象的值使用 reflect.ValueOf 函数可以返回 Value 类型value 类型还可以生成原始类型对象 反射值对象reflect.Value提供对结构体访问的方法通过这些方法可以完成对结构体任意值的访问方法列表参考 Type 常用方法 修改成员的值 使用 reflect.Value 对包装的值进行修改时需要遵循一些规则。如果该对象不可寻址或者成员是私有的则无法修改对象值 func main() {type dog struct {LegCount intage int}// 获取dog实例地址的反射值对象valueOfDog : reflect.ValueOf(dog{})// 取出dog实例地址的元素valueOfDog valueOfDog.Elem()// 获取legCount字段的值vLegCount : valueOfDog.FieldByName(LegCount)vAge : valueOfDog.FieldByName(age)// 尝试设置legCount的值vLegCount.SetInt(4)// 这里会报错vAge.SetInt(4)fmt.Println(vLegCount.Int()) }3 通过反射调用函数 使用反射调用函数时需要将参数使用反射值对象的切片 []reflect.Value 构造后传入 Call() 方法中调用完成时函数的返回值通过 []reflect.Value 返回 package main import (fmtreflect ) // 普通函数 func add(a, b int) int {return a b } func main() {// 将函数包装为反射值对象funcValue : reflect.ValueOf(add)// 构造函数参数, 传入两个整型值paramList : []reflect.Value{reflect.ValueOf(10), reflect.ValueOf(20)}// 反射调用函数retList : funcValue.Call(paramList)// 获取第一个返回值, 取整数值fmt.Println(retList[0].Int()) }4 反射性能 通过反射生成对象和字段赋值都会影响性能但是通过反射的确确确实实能简化代码为业务逻辑提供统一的代码 比如标准库中json的编解码、rpc服务的注册和调用 一些ORM框架比如gorm等都是通过反射处理数据的这是为了能处理通用的类型。
http://www.dnsts.com.cn/news/109254.html

相关文章:

  • 网站模版 蓝色青岛模版网站建设哪家好
  • 网站地图 xml html重庆网站建设是什么
  • 青岛网站建设要多少钱企业号码查询系统
  • 网站平台设计 问题营销最好的方法
  • 遵义网站建设价格word模板免费网站
  • 请多记几个本站域名防止失联wordpress 转盘插件
  • 如何网站开发语言微网站教程
  • 网站开发连接数据库的方法没有地址如何注册公司
  • 网站整体色彩的建设二级域名格式
  • 网站被攻击怎么让百度重新蜘蛛自动抓荣耀手机官方商城官网
  • 网站的建设服务器学校网站建设汇报ppt模板
  • 网站导航html源码怎么做百度网盘链接网站
  • 电脑十大免费游戏网站网站建设小程序南宁
  • 优化推广网站seo软件外包公司怎么样
  • asp网站 底部版权所有lamp wordpress 一键
  • 北京网站建设推广服务信息企业vi设计是啥
  • 网站推广的基本方法为如何修改网站后台
  • 小城镇建设的网站创意矿泉水瓶子设计
  • 阿里云t5做网站h5制作培训
  • 零食公司建立网站的原因网页微信登录
  • wordpress全站使用cdn企业官网维护
  • 惠阳网站建设通化市建设工程招投标网站
  • 网站报价表格辽宁省建设银行e护航网站
  • 高性能网站建设朝阳公园网站建设
  • 单位建网站的详细步骤seo怎么做网站内容
  • 网站会员系统怎么做com域名申请
  • 网站做熊掌号码企业外贸网站推广
  • 企业手机网站程序是什么wordpress 搜索排除
  • 邢台网站制作那家便宜脉脉用的什么技术做网站
  • 佛山网站开发招聘潍坊市建设信息网