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

台州建设局网站互联网大厂有哪些

台州建设局网站,互联网大厂有哪些,桂林市区漓江水倒灌,东莞网站关键词1. Golang反射概述 Go语言的反射#xff08;reflection#xff09;是指在运行时动态地获取类型信息和操作对象的能力。在Go语言中#xff0c;每个值都是一个接口类型#xff0c;这个接口类型包含了这个值的类型信息和值的数据#xff0c;因此#xff0c;通过反射#x…1. Golang反射概述 Go语言的反射reflection是指在运行时动态地获取类型信息和操作对象的能力。在Go语言中每个值都是一个接口类型这个接口类型包含了这个值的类型信息和值的数据因此通过反射可以获取一个值的类型信息调用该值的方法或者修改该值的属性等。 Go语言中的反射机制主要通过reflect包来实现。reflect包提供了Type、Value和Kind三个类型分别表示类型信息、值信息和值的种类。其中Type类型可以表示任何类型的信息包括基本类型、结构体、接口类型、函数类型等。Value类型可以表示任何值包括基本类型、结构体、接口类型、函数类型等。Kind类型则表示值的种类如int、float、string等。 通过reflect包可以获取一个类型的信息例如 package mainimport (fmtreflect )type MyStruct struct {Name stringAge int }func main() {t : reflect.TypeOf(MyStruct{})fmt.Println(Type:, t.Name())fmt.Println(Kind:, t.Kind())for i : 0; i t.NumField(); i {field : t.Field(i)fmt.Printf(%s (%s)\n, field.Name, field.Type.Name())} } 实现结果 上述代码中使用reflect.TypeOf函数获取MyStruct类型的信息然后打印出类型名称、类型种类和字段信息。 同时也可以通过reflect包获取一个值的信息例如 package mainimport (fmtreflect )type MyStruct struct {Name stringAge int }func main() {v : MyStruct{Name: Tom, Age: 18}rv : reflect.ValueOf(v)fmt.Println(Type:, rv.Type().Name())fmt.Println(Kind:, rv.Kind())for i : 0; i rv.NumField(); i {field : rv.Field(i)fmt.Printf(%s: %v\n, field.Type().Name(), field.Interface())} } 实现结果 上述代码中使用reflect.ValueOf函数获取MyStruct类型的值信息并通过rv.Type()函数获取值的类型信息通过rv.Kind()函数获取值的种类信息并打印出字段名称和值。同时还可以通过rv.FieldByName函数获取指定名称的字段信息并通过rv.FieldByNameFunc函数获取符合条件的字段信息。 除了获取类型和值的信息之外反射还可以动态地创建类型、创建值、调用方法和修改属性等。例如可以使用reflect.New函数动态创建一个新的值可以使用reflect.ValueOf函数设置一个值的属性可以使用reflect.MethodByName函数调用一个方法可以使用reflect.ValueOf函数修改一个值的属性等。 2. 简单的反射实现修改变量的值 下面示例中简单演示了如何直接修改City变量的值 package mainimport (fmtreflect )type Address struct {City stringState string } type Person struct {Name stringAge intAddress Address }func main() {p : Person{Name: Alice,Age: 25,Address: Address{City: New York,State: NY,},}// 通过反射获取到嵌套结构体中需要修改的字段的反射值field : reflect.ValueOf(p).Elem().FieldByName(Address).FieldByName(City)// 判断该字段是否可修改如果不可修改则需要使用 Elem() 函数获取到该字段的可修改的反射值if !field.CanSet() {field field.Elem()}// 根据需要修改的值的类型使用反射包中的 SetValue() 函数来修改该字段的值field.SetString(Los Angeles)// 输出: {Alice 30 {Los Angeles NY}}fmt.Println(the result is:, p) }输出结果 然而在实际运用中第一种方式往往不够灵活对于使用者而言更多的想直接调用某个方法通过传入需要修改的变量的路径以及修改后的值来直接实现基于此对第一种方式进行改进。 3. 实现传入路径修改变量的值 通过将具体操作封装为ModifyValue函数来实现传入路径后对路径进行拆解 package mainimport (fmtreflectstrings )type Address struct {City stringState string } type Person struct {Name stringAge intAddress Address }func ModifyValue(req *Person, modifyPath string, value interface{}) bool {// 通过反射获取 req 的值reqValue : reflect.ValueOf(req).Elem()// 根据 path 找到 req 中需要修改的字段substrings : strings.Split(modifyPath, .)for i, substring : range substrings {if i 0 {continue}reqValue reqValue.FieldByName(substring)if !reqValue.IsValid() {return false}}// 将 value 转换成需要修改的字段的类型newValue : reflect.ValueOf(value).Convert(reqValue.Type())// 设置修改后的值reqValue.Set(newValue)return true }func main() {req : Person{Name: Tom,Age: 12,Address: Address{City: New York,State: NY,},}result : ModifyValue(req, req.Address.City, Los Angeles)fmt.Printf(the result is:%v, req.Address.City:%v, result, req.Address.City) } 实现结果 总之Go语言的反射机制为程序提供了一种动态地获取类型信息和操作对象的能力但是反射的效率较低也要谨慎使用。
http://www.pierceye.com/news/691574/

相关文章:

  • 东莞网站设计网址html怎么添加图片为背景
  • 怎样自己做企业网站网上投诉平台
  • 平价网站建设宝安营销型网站制作
  • 中英网站怎么做seo团队管理系统
  • 做签到的网站上海网站se0优化公司
  • 网站开发技术说明文档网站审核员做点啥
  • 网站设计与网页设计的区别建设部资质查询网站
  • 教育网站制作哪家服务好网站建设运转
  • 山西省轻工建设有限责网站网件路由器无线桥接
  • 做网站 怎么选择公司wordpress lnmp1.4
  • 网站建设价格标准科技感设计感的展厅
  • 广州番禺建设银行网站登录做摄影网站的目的
  • 前端外包网站php网站开发哪个好
  • 网站开发与维护好找工作吗网站建设招标书模板
  • 浙江金顶建设公司网站房产获客软件
  • 什么网站比较容易做python做网站服务器
  • 东城网站建设微信小程序商店怎么开
  • 企业网站源码千博网站推广怎么做流量大
  • 福州最好的网站建设服务商浙江华临建设集团有限公司网站
  • cdr 做网站支付宝小程序开发者工具
  • 建一个全部由自己控制的网站需要多少钱手机网站大全
  • 酒店电子商务网站策划书网站排名下降的原因
  • 成都网站制作公司报价成都装修公司哪家好
  • 用自己的电脑做网站需要备案吗wordpress rss教程
  • 洛阳网站搭建江西网站建设价格低
  • 戴尔网站建设的目的济宁哪里有做网站的
  • 给单位做网站需要多少钱wordpress手机编辑
  • 网站开发实验报告总结怎样搭建微网站
  • 诸暨有哪些制作网站公司代理品牌
  • jsp mysql 网站开发响应网官方网站