当前位置: 首页 > 网络应用技术

去高级别17,反射机制,反思三个法律!

时间:2023-03-05 17:19:44 网络应用技术

  为了进行反思,已经引入了上一篇文章。门户网站:“在运行时进行反思,在深度分析中!”,我们在这里谈论三个反思定律。

  GO语言提供了一种机制,可以更新和检查变量的值,调用变量的方法以及在运行时的变量支持的固有操作,但不知道编译期间这些变量的特定类型。

  官员对此有非常简洁的介绍,这两个词很有趣:

  我们知道GO是一种静态类型的语言,例如“ int”,“ float32”,“ []字节”等。EAFE。east变量在编译时确定其自己的静态类型。

  接口类型是一种特殊类型,代表该方法的方法,可用于存储实现其方法的任何值。

  最特殊的接口类型是空接口类型,即接口用于表示一组方法集,所有实现此方法集合的类型都被考虑实现接口。因此,设置了空接口类型的方法要空,这意味着可以认为所有类型可以实现。因此,空的接口类型变量可以存储所有值。这就是为什么有些人认为Go是一种动态类型的原因,这是一种幻想。

  接口类型具有(值,类型)对,GO提供了一种提取值和类型提取接口的方法。反思是检查界面。

  通过反射获得变量的值和类型,例如:

  操作结果:

  反射是针对接口类型的变量,可接受的参数为Intervace {}类型,即,X值转换为接口。

  操作结果:

  对象X转换为反射对象V,V,通过接口()接口转换为接口对象,接口对象传递。(float64)类型断言以获得float64类型的值。

  断言的格式为:s = x。(t),这意味着,如果还实施了X所持的元素,则该值将传递给S。

  通过反射,可以将接口类型变量转换为反射对象,并且可以用其保持值设置反射对象的值。

  错误示例:

  上面的程序将发生在恐慌中,因为v没有修改。反射的值。ValueOf()函数实际上是x,而不是x本身的值。也就是说,它不能影响x以通过V修改其值,因此如果X的地址用于使用V的地址,则可以进行错误。可以对其进行修改,但是目前,V表示指针地址。我们要设置的是指针指向的内容,也就是说,我们要修改的内容是。如何通过V修改X的值?

  Reffle.Value提供了ELEM()方法,该方法可以使指向指向指向的值。

  例子:

  操作结果: