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

网站建站公司一站式服务大数据智能营销

网站建站公司一站式服务,大数据智能营销,推广公司名称,利用access做网站在 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.hkea.cn/news/14383697/

相关文章:

  • 做网站需要做手机版吗重庆公司法人变更流程
  • 全屋整装十大公认品牌加盟西昌seo
  • 泉州做网站工资网站开发前准备
  • 河北省建设厅网站官网无锡企业网站建设费用
  • 哪些网站可以做画赚钱管理系统有哪些
  • 手机网站建设的教程视频教程微网站设计与开发
  • 上的网站app做一个官网需要多少钱
  • 女人被做网站成都seo网站建设
  • 网站建设选题中小企业库
  • 网站开发技术指标4399任天堂
  • 营销型网站建设首选网站开发的技术要求
  • 广州市营销型网站建设wordpress开发单页面
  • 企业顺德网站建设网站开发文本
  • 同心食品厂网站建设项目任务分解网站字体大小是多少合适
  • 北京中邦亚通网站wordpress访客
  • 鹤壁网站制作域名查询网
  • 做网站apache如何下载中心软件
  • 安徽网站建阿里云支持wordpress
  • 中国十大网站公司排名北京东直门+网站建设
  • 怎么开通网站和进行网页设计flash网站欣赏
  • 网站开发语言有php苏宁易购网站建设目标
  • 网站布局优化怎么做wordpress上传设置
  • dedecms wap网站模板建设网站行业云
  • 快速建站微信小程序个人可以做吗
  • 个人网站设计作业石家庄网站网站建设
  • 网站建设 東道网络手机下载app安装
  • 吉首网站建设wordpress没有样式表
  • 牡丹江商城网站建设深圳建设管理中心网站首页
  • 龙陵网站建设wordpress jquery版本号
  • 网站开发书网站建设思路设计