当前位置: 首页 > 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.zqtcl.cn/news/691574/

相关文章:

  • 自主设计和创建网站网站建设价格便宜
  • 高手做网站财经资讯网站该怎么做推广
  • 加强农业网站建设青岛全网营销推广
  • 做淘客网站怎么样济南软件公司排名
  • 企业网站优化兴田德润怎么样网站建设建设公司资质要求
  • 如何把网站做跳转浏览器链接地址wordpress 离线更新
  • 乌海学校网站建设wordpress默认主题下载
  • 海兴县做网站如何选网站建设公司
  • asp网站设为首页代码孝仙洪高速公路建设指挥部网站
  • 浦东新区网站开发人才网站建设策划书
  • 网站做flash好不好免费微信公众号素材网
  • 开发网站嵌入广告汕头电商网站建设
  • 电脑做科目一网站购物网站怎么创建
  • c2c网站建设公司wordpress被公众号干掉
  • wordpress托管建站网站页面布局和样式设计
  • 建站平台江苏省建设监理协会网站
  • 安徽网站开发培训价格百度seo排名公司
  • 青海网站建设费用oa系统和erp系统区别
  • 个人做网站的注意事项网站开发工程师6
  • 镇江百度网站建设北京网站开发价格
  • 大岭山镇仿做网站推广计划表格
  • 网站备案地址不是我的地址怎么办建设银行网站查询业务收费吗
  • 电商网站设计内容网站编辑及seo招聘
  • 用什么网站开发浙江省住房和建设厅网站
  • 站长工具seo优化建议微信小程序线上商城怎么申请
  • 建筑网站开发设计做网站的公司msgg
  • 设计师个人网站模板网站的尾页要怎么做
  • 营销型网站建设风格设定包括哪些方面wordpress企业魔板
  • 怎样做淘客网站做绿色产品的网站
  • 关于网站建设的通知wordpress点注册后一直不出来