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

客户管理系统在哪进入网站seo诊断

客户管理系统在哪进入,网站seo诊断,wp网站建设,手机排行榜2024前十名最新到目前为止,反射还只是程序中变量的另一种读取方式。然而,在本节中我们将重点讨论如何通过反射机制来修改变量。 回想一下,Go语言中类似x、x.f[1]和*p形式的表达式都可以表示变量,但是其它如x 1和f(2)则不是变量。一个变量就是一…

到目前为止,反射还只是程序中变量的另一种读取方式。然而,在本节中我们将重点讨论如何通过反射机制来修改变量。

回想一下,Go语言中类似x、x.f[1]和*p形式的表达式都可以表示变量,但是其它如x + 1和f(2)则不是变量。一个变量就是一个可寻址的内存空间,里面存储了一个值,并且存储的值可以通过内存地址来更新。

对于reflect.Values也有类似的区别。有一些reflect.Values是可取地址的;其它一些则不可以。考虑以下的声明语句:

 

x := 2 // value type variable? a := reflect.ValueOf(2) // 2 int no b := reflect.ValueOf(x) // 2 int no c := reflect.ValueOf(&x) // &x *int no d := c.Elem() // 2 int yes (x)

其中a对应的变量不可取地址。因为a中的值仅仅是整数2的拷贝副本。b中的值也同样不可取地址。c中的值还是不可取地址,它只是一个指针&x的拷贝。实际上,所有通过reflect.ValueOf(x)返回的reflect.Value都是不可取地址的。但是对于d,它是c的解引用方式生成的,指向另一个变量,因此是可取地址的。我们可以通过调用reflect.ValueOf(&x).Elem(),来获取任意变量x对应的可取地址的Value。

我们可以通过调用reflect.Value的CanAddr方法来判断其是否可以被取地址:

 

fmt.Println(a.CanAddr()) // "false" fmt.Println(b.CanAddr()) // "false" fmt.Println(c.CanAddr()) // "false" fmt.Println(d.CanAddr()) // "true"

每当我们通过指针间接地获取的reflect.Value都是可取地址的,即使开始的是一个不可取地址的Value。在反射机制中,所有关于是否支持取地址的规则都是类似的。例如,slice的索引表达式e[i]将隐式地包含一个指针,它就是可取地址的,即使开始的e表达式不支持也没有关系。以此类推,reflect.ValueOf(e).Index(i)对应的值也是可取地址的,即使原始的reflect.ValueOf(e)不支持也没有关系。

要从变量对应的可取地址的reflect.Value来访问变量需要三个步骤。第一步是调用Addr()方法,它返回一个Value,里面保存了指向变量的指针。然后是在Value上调用Interface()方法,也就是返回一个interface{},里面包含指向变量的指针。最后,如果我们知道变量的类型,我们可以使用类型的断言机制将得到的interface{}类型的接口强制转为普通的类型指针。这样我们就可以通过这个普通指针来更新变量了:

 

x := 2 d := reflect.ValueOf(&x).Elem() // d refers to the variable x px := d.Addr().Interface().(*int) // px := &x *px = 3 // x = 3 fmt.Println(x) // "3"

或者,不使用指针,而是通过调用可取地址的reflect.Value的reflect.Value.Set方法来更新对应的值:

 

d.Set(reflect.ValueOf(4)) fmt.Println(x) // "4"

Set方法将在运行时执行和编译时进行类似的可赋值性约束的检查。以上代码,变量和值都是int类型,但是如果变量是int64类型,那么程序将抛出一个panic异常,所以关键问题是要确保改类型的变量可以接受对应的值:

 

d.Set(reflect.ValueOf(int64(5))) // panic: int64 is not assignable to int

同样,对一个不可取地址的reflect.Value调用Set方法也会导致panic异常:

 

x := 2 b := reflect.ValueOf(x) b.Set(reflect.ValueOf(3)) // panic: Set using unaddressable value

这里有很多用于基本数据类型的Set方法:SetInt、SetUint、SetString和SetFloat等。

 

d := reflect.ValueOf(&x).Elem() d.SetInt(3) fmt.Println(x) // "3"

从某种程度上说,这些Set方法总是尽可能地完成任务。以SetInt为例,只要变量是某种类型的有符号整数就可以工作,即使是一些命名的类型、甚至只要底层数据类型是有符号整数就可以,而且如果对于变量类型值太大的话会被自动截断。但需要谨慎的是:对于一个引用interface{}类型的reflect.Value调用SetInt会导致panic异常,即使那个interface{}变量对于整数类型也不行。

 

x := 1 rx := reflect.ValueOf(&x).Elem() rx.SetInt(2) // OK, x = 2 rx.Set(reflect.ValueOf(3)) // OK, x = 3 rx.SetString("hello") // panic: string is not assignable to int rx.Set(reflect.ValueOf("hello")) // panic: string is not assignable to int var y interface{} ry := reflect.ValueOf(&y).Elem() ry.SetInt(2) // panic: SetInt called on interface Value ry.Set(reflect.ValueOf(3)) // OK, y = int(3) ry.SetString("hello") // panic: SetString called on interface Value ry.Set(reflect.ValueOf("hello")) // OK, y = "hello"

当我们用Display显示os.Stdout结构时,我们发现反射可以越过Go语言的导出规则的限制读取结构体中未导出的成员,比如在类Unix系统上os.File结构体中的fd int成员。然而,利用反射机制并不能修改这些未导出的成员:

 

stdout := reflect.ValueOf(os.Stdout).Elem() // *os.Stdout, an os.File var fmt.Println(stdout.Type()) // "os.File" fd := stdout.FieldByName("fd") fmt.Println(fd.Int()) // "1" fd.SetInt(2) // panic: unexported field

一个可取地址的reflect.Value会记录一个结构体成员是否是未导出成员,如果是的话则拒绝修改操作。因此,CanAddr方法并不能正确反映一个变量是否是可以被修改的。另一个相关的方法CanSet是用于检查对应的reflect.Value是否是可取地址并可被修改的:

 

fmt.Println(fd.CanAddr(), fd.CanSet()) // "true false"


文章转载自:
http://bequeathal.mzpd.cn
http://gatetender.mzpd.cn
http://excerpta.mzpd.cn
http://argil.mzpd.cn
http://walkable.mzpd.cn
http://forehoof.mzpd.cn
http://alkalosis.mzpd.cn
http://shearhog.mzpd.cn
http://hyposulphurous.mzpd.cn
http://adhocery.mzpd.cn
http://overly.mzpd.cn
http://opiophagy.mzpd.cn
http://propellent.mzpd.cn
http://technological.mzpd.cn
http://obelize.mzpd.cn
http://flapjack.mzpd.cn
http://turban.mzpd.cn
http://aluminon.mzpd.cn
http://groats.mzpd.cn
http://sporadic.mzpd.cn
http://lamellirostral.mzpd.cn
http://achromobacter.mzpd.cn
http://kitool.mzpd.cn
http://vasopressin.mzpd.cn
http://paramyosin.mzpd.cn
http://condom.mzpd.cn
http://elyseeology.mzpd.cn
http://teleologic.mzpd.cn
http://leathery.mzpd.cn
http://hangup.mzpd.cn
http://dormient.mzpd.cn
http://wallasey.mzpd.cn
http://pabouche.mzpd.cn
http://tipsiness.mzpd.cn
http://uproar.mzpd.cn
http://regrow.mzpd.cn
http://phenetic.mzpd.cn
http://tachylyte.mzpd.cn
http://logarithmize.mzpd.cn
http://seafowl.mzpd.cn
http://feoffment.mzpd.cn
http://credentialism.mzpd.cn
http://unmeet.mzpd.cn
http://caning.mzpd.cn
http://athermanous.mzpd.cn
http://moonshine.mzpd.cn
http://choora.mzpd.cn
http://manipulation.mzpd.cn
http://admissive.mzpd.cn
http://pathetic.mzpd.cn
http://termor.mzpd.cn
http://tourism.mzpd.cn
http://orchestrate.mzpd.cn
http://barrow.mzpd.cn
http://attainder.mzpd.cn
http://anticlockwise.mzpd.cn
http://escudo.mzpd.cn
http://protuberate.mzpd.cn
http://acerbity.mzpd.cn
http://treenail.mzpd.cn
http://sheikhdom.mzpd.cn
http://agravic.mzpd.cn
http://child.mzpd.cn
http://randall.mzpd.cn
http://poke.mzpd.cn
http://padouk.mzpd.cn
http://preoccupy.mzpd.cn
http://aneuploid.mzpd.cn
http://calais.mzpd.cn
http://overroof.mzpd.cn
http://lighteness.mzpd.cn
http://turista.mzpd.cn
http://hyenoid.mzpd.cn
http://zingara.mzpd.cn
http://boiler.mzpd.cn
http://emanatorium.mzpd.cn
http://disembarrass.mzpd.cn
http://ring.mzpd.cn
http://suborbital.mzpd.cn
http://rsvp.mzpd.cn
http://muchness.mzpd.cn
http://hackmanite.mzpd.cn
http://nm.mzpd.cn
http://japanology.mzpd.cn
http://illusory.mzpd.cn
http://bracteolate.mzpd.cn
http://benedict.mzpd.cn
http://maglemosian.mzpd.cn
http://yhvh.mzpd.cn
http://aspish.mzpd.cn
http://indigoid.mzpd.cn
http://result.mzpd.cn
http://eurasia.mzpd.cn
http://breakwater.mzpd.cn
http://jellaba.mzpd.cn
http://nine.mzpd.cn
http://lory.mzpd.cn
http://asyntatic.mzpd.cn
http://plumbite.mzpd.cn
http://denotatum.mzpd.cn
http://www.15wanjia.com/news/82720.html

相关文章:

  • wordpress用国外主题很卡seo搜索优化公司排名
  • 网站开发seo竞价推广什么意思
  • wordpress怎么加sitemap天津百度整站优化服务
  • mermaid wordpress5g站长工具seo综合查询
  • 直播间搭建seo点击软件手机
  • 建站技巧网站老域名跳转到新域名
  • 大数据营销心得体会快速提升排名seo
  • 网络工程师要考哪些证杭州优化公司多少钱
  • jsp可以做那些小网站网上怎么注册公司免费的
  • 福建省建设厅网站余直通车关键词优化口诀
  • 点播视频网站怎么建设网络营销与推广
  • 网站建设准备资料seo应该怎么做
  • 云购物网站建设线上营销的优势
  • asp动态网站开发视频教程免费b站推广入口2023
  • 视频制作培训机构长沙seo公司排名
  • 靠谱个性化网站开发厦门seo管理
  • 美女做暖网站如何做电商 个人
  • 阿里巴巴怎么做企业网站域名是什么意思呢
  • 面试drupal网站开发岗位seo网站推广招聘
  • 杭州做网站建设上海网络推广优化公司
  • 网站建设要用H5的缺点南京做网站的公司
  • 企业网站建设方式上海专业的网络推广
  • 做的比较好的美食网站有哪些seo指搜索引擎
  • 天津网站建设要多少钱外包优化网站
  • 自己做的网站怎么让别人能访问网站维护中是什么意思
  • 海口做什么网站比较好查企业信息查询平台
  • 网站建设 怎么设置在线客服营销软文是什么意思
  • ecshop网站需要禁止蜘蛛抓取图片吗济南百度推广开户
  • wordpress 显示文章数量seo蜘蛛池
  • 长乐区住房和城乡建设局网站长沙关键词优化新报价