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

去语言|反映

时间:2023-03-06 11:25:58 网络应用技术

  首先查看Rob Pike在官方文档中给出的反思的定义:

  计算中的反思是程序进行挖掘以检查ITES自身结构的能力,尤其是通过类型。这是一种元编程形式。这也是要约束。

  (在计算机领域,反射是一个过程 - 通过类型理解自己的结构。它是元编程的组成部分之一,也是一个令人困惑的问题。)

  Wikipedia的定义:

  在计算机科学中,反射是指计算机程序可以在可以访问运行时间时访问,检测和修改其自身状态或行为的能力。在隐喻条款中,反思是该程序可以“观察”并在运行时修改其行为。

  不同语言的反射模型是不同的,有些语言不支持反射。“ GO语言圣经”定义了这样的反思:

  GO语言提供了一种更新变量并检查其值并在运行时调用它们的机制,但在编译过程中不知道这些变量的特定类型,这称为反射机制。

  为什么要使用反射?

  需要反映的两个常见场景:

  但是,仍然有一些反思的原因:

  如何实现反射?我们以前已经学习了界面,哪个是一个非常强大的GO语言来实现抽象的工具。接口变量给出实体类型后,该接口将存储实体的类型信息。反射是通过接口的类型信息实现的,并且反射基于类型。

  GO语言在反射软件包中定义了各种类型,并实现了各种反射功能。通过它们,他们可以检测信息的类型并更改类型的价值。在进行更详细的理解之前,我们需要修改GO语言的某些特征。SO被称呼的温暖知道如何利用这些特征中的反射机制。

  GO语言是一种静态类型的语言。已确定汇编的类型。例如,对于基本数据类型的重新定义类型,有必要确认反射时返回的类型。空气接口接口的反射机制通过接口执行,并且空接口相似Java对象可以与任何类型进行交互。因此:

  go是一种静态类型的语言。每个变量具有静态类型,这意味着每个变量的类型在编译时确定:int,float32, *autotype,[] byte,[] byte,channel [] int等。

  在反射概念中,在编译时,变量类型是静态类型。仅在运行时仅运行时才称为动态类型。

  动态类型:在运行时分配到此变量时,该值的类型(如果值为nil,则没有动态类型)。变量的动态类型可能在运行时更改,这主要取决于其分配(提供)该变量是接口类型)。

  GO语言的反映基于类型。Golang的指定类型变量的类型是静态的(也就是说,变量指定了INT和字符串,其反射类型主要与Golang的接口类型有关(其类型是混凝土类型),并且仅反射接口类型。

  在Golang的实现中,每个接口变量都有相应的对。对记录实际变量的值和类型:

  值是实际的变量值,类型是实际变量的类型。接口{}类型的变量包含2个指针,一种指向类型的指针类型[相应的混凝土类型],另一个指向实际值的指针[相应的值]。

  例如,创建类型是*os.file的变量,然后将其提供给接口变量r:

  以下信息将记录在接口变量r:(tty, *os.file)中。在接口变量的连续分配过程中,这对没有变化。接口变量R分配给另一个接口变量W:

  对接口变量w的对与r对相同,两者都相同:( tty, *os.file)。即使W是一个空的接口类型,对也没有变化。

  界面及其对的存在是实现Golang反射的先决条件。反射是一种机制,用于检测接口变量(值值;类型混凝土类型)对的机制。

  因此,我们需要了解两种基本概念类型和价值。它们也是GO语言包中反映空间的两种最重要类型。

  我们通常使用的软件包是反射包。

  由于反射是一种机制,用于检测接口变量内的一对对(值值;键入混凝土类型)对。那么Golang的Refflex Reflex Package中有哪些方法使我们可以直接在变量内获取信息?它提供了两种类型(或两种方法),使我们能够轻松访问接口变量的内容,即反映()和反射。

  反射型()是获得对中的类型,反思valueof()以获取对中的值。

  首先,您需要将其转换为反射式或反射。值,并根据不同情况调用不同的功能。

  示例代码:

  操作结果:

  阐明

  类型和值都包括大量方法。第一个有用的方法应该是友好的。此方法返回此类型的特定信息:uint,float64等。该值类型还包含一系列方法,例如int(),用于返回相应的值。以下是类型的类型:

  原始:https://juejin.cn/post/7102346021337825287