Solidity 中的 struct 是什么?

2025年6月2日 | 阅读6分钟

与其他编程语言不同,Solidity 智能合约提供诸如布尔值、字符串、整数等数据类型,并且要成为一名精通的 区块链 开发人员,需要了解有关数据类型的所有详细信息,而 Struct 就是这样一种数据类型。

在本教程中,我们将介绍有关 struct 的所有详细信息,演示如何在 Solidity 智能合约中定义和创建 struct。它们如何工作以及技术示例,以使用 struct 创建更健壮的智能合约。

什么是 Solidity struct?

Struct 被定义为一种 数据结构 或容器,用于存储可以进一步分组到一个结构或变量类型中的各种数据类型。 Struct 可能包含一个枚举作为成员。 Struct 的变量在语法上像对象的变量一样引用。

您可以将 struct 想象成可以用来携带不同数据类型的容器。 如果您将容器从一个地方移动或复制到另一个地方,不同的自定义类型也将随之移动。 因此,当 Solidity 开发人员声明或调用 struct 的名称时,struct 会根据其中的数据类型做出响应。

如何在 Solidity 中定义和创建 Struct

Struct 的语法与 Javascript 中的对象声明类似。 Solidity struct 的语法如下:

语法

按照以下步骤在 solidity 智能合约中创建一个 struct:

  1. Struct 在 solidity 中使用“struct”关键字声明。 此关键字告诉编译器以下数据是一种自定义类型
  2. 为您的 struct 提供一个合适的名称。
  3. 使用花括号,因为任何其他形式的括号,如方括号或圆括号,都无法编译

程序:在下面的示例中,我们声明了一个名为 solidityStructExample1 的智能合约。 此外,我们还创建了一个结构来设置和获取 struct 类型变量的值。

输出

以上代码将返回以下输出

What is a struct in Solidity?

说明

在上面的智能合约中,我们创建了一个名为 soliditystructExample1 的智能合约,我们在其中封装了所有结构的数据类型。 我们创建了一个名为 novel 的结构,并为 Novel 定义了不同的字段(student.age、novelWritter、novelId、novelAvaialable)。 之后,我们创建了一个函数来声明结构的 Objects。

程序 2:在下面的示例中,我们声明了一个名为 solidityStructExample 的智能合约。 此外,我们还创建了一个*定义小说所需的不同元素的结构*,并声明了设置和获取 struct 类型变量值的函数。

输出

What is a struct in Solidity?

说明

在上面的智能合约中,我们创建了一个名为 soliditystructExample 的智能合约,我们在其中封装了所有结构的数据类型。 我们创建了一个名为 novel 的结构,并为 Novel 定义了不同的字段(novelName、novelWritter、novelId、novelAvaialable)。 之后,我们创建了一个函数来声明结构的 Objects。

如何导入 Solidity Struct

Solidity 允许您将 struct 从一个智能合约导入到另一个智能合约。 这不仅可以节省开发人员的时间,还有助于他们创建健壮的、可重用的代码。 让我们实际看看如何将 struct 从一个智能合约导入到另一个智能合约:一个创建了 struct 的智能合约,另一个将要导入 struct 的智能合约。

程序 1:第一步是创建一个智能合约,并在其中声明一个 struct。

注意:要成功导入您的 struct 且没有任何错误,请确保将您的第二个合约命名为与您要导入的 struct (在第一个智能合约中声明) 相同的名称。 如果您采用任何其他名称,Solidity 编译器将无法识别它,从而导致错误。

程序 2:将第一个智能合约的 struct 导入到第二个智能合约的程序。

您的 struct 将成功导入到此智能合约中。 因此,您可以使用它。

Struct 可以在 Solidity 中进行映射吗?

Struct 可以在 Solidity 中作为值类型进行映射,因此您可以跟踪有关 struct 的任何成员的信息。 例如,看一下以下代码:

示例:将第一个智能合约的 struct 导入到第二个智能合约的程序。

在此合约中,特定 DAO(去中心化自治组织)中每个成员的详细信息都进行了分类。 在上面的代码中,我们创建了两个映射成员:第一个是一个简单的版本,我们在其中将地址映射到成员,第二个我们创建了一个嵌套映射。

注意事项

  1. 始终使用花括号来声明 struct 的变量。 如果您不使用花括号,您将在 Remix 上生成此 ParserError 消息。
  2. 声明每个变量后,使用分号结束它。
  3. 确保声明一个具有适合其类的正确输入变量的数据类型,否则会抛出编译错误。
  4. 您可以在智能合约中创建多个 struct,但请确保为它们提供不同的名称以避免任何歧义。

结论

Solidity Structs 使开发人员能够创建满足其编程需求的自定义数据类型。 您可以将自定义类型想象成可以用来携带不同数据类型的容器。 本教程为您提供了您需要了解的关于 struct 的所有详细信息。 但是,旅程并没有到此结束 - 继续练习以提高您的熟练程度。