

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 的基础知识 适用于 Rust 的 AWS SDK
<a name="fundamentals"></a>

学习编程基础知识 适用于 Rust 的 AWS SDK，例如：Rust 编程语言基础知识、有关 Rust 板条箱的 SDK 的信息、项目配置以及适用于 Rust 使用 Tokio 运行时的 SDK。

## 先决条件
<a name="prerequisites"></a>

要使用，必须安装 Rust 和 Cargo。 适用于 Rust 的 AWS SDK
+ 安装 Rust 工具链：[https://www.rust-lang。 org/tools/install](https://www.rust-lang.org/tools/install)
+ 通过运行以下命令安装 `cargo-component` [工具](https://github.com/bytecodealliance/cargo-component)：`cargo install cargo-component`

### 推荐的工具：
<a name="recommended-tools"></a>

可以在 IDE 中安装以下可选工具，以帮助完成代码和进行故障排除。
+ 有关 rust-analyzer 扩展程序，请参阅 [Visual Studio Code 中的 Rust](https://code.visualstudio.com/docs/languages/rust)。
+ 有关 Amazon Q 开发者版，请参阅[在 IDE 中安装 Amazon Q 开发者版扩展程序或插件](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html)。

## Rust 基础知识
<a name="rust-fundamentals"></a>

以下是 Rust 编程语言的一些基础知识，了解这些基础知识会很有帮助。有关更多信息的所有参考资料均来自 [Rust 编程语言](https://doc.rust-lang.org/book/title-page.html#the-rust-programming-language)。
+ `Cargo.toml` 是标准 Rust 项目配置文件，它包含该项目的依赖项和一些元数据。Rust 源文件具有 `.rs` 文件扩展名。请参阅 [Hello, Cargo\!](https://doc.rust-lang.org/book/ch01-03-hello-cargo.html)。
  + 您可以使用配置文件自定义 `Cargo.toml`，请参阅[使用版本配置文件自定义构建](https://doc.rust-lang.org/book/ch14-01-release-profiles.html)。这些配置文件完全无关，与共享 AWS `config`文件中 AWS配置文件的使用无关。
  + 向项目和此文件添加库依赖项的常用方法是使用 `cargo add`。请参阅[https://doc.rust-lang.org/cargo/commands/cargo-add.html](https://doc.rust-lang.org/cargo/commands/cargo-add.html)。
+ Rust 有一个基本函数结构，如下所示。`let` 关键字声明了变量，可以与赋值（=）结合使用。如果您没有在 `let` 之后指定类型，编译器会推断出类型。请参阅[变量和可变性](https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html)。

  ```
  fn main() {
      let w = "world";
      println!("Hello {}!", w);
  }
  ```
+ 要声明变量 `x` 具有显式类型 `T`，Rust 使用语法 `x: T`。请参阅[数据类型](https://doc.rust-lang.org/book/ch03-02-data-types.html)。
+ `struct X {}` 定义新类型 `X`。方法是在自定义结构类型 `X` 上实现的。类型 `X` 的方法是用以关键字 `impl` 为前缀的实现块声明的。在实现块中，`self` 是指调用该方法的结构的实例。请参阅[关键字 `impl`](https://doc.rust-lang.org/std/keyword.impl.html) 和[方法语法](https://doc.rust-lang.org/book/ch05-03-method-syntax.html)。
+ 如果一个感叹号（“\!”）跟在看似函数定义或函数调用的后面，则表示代码正在定义或调用宏。请参阅[宏](https://doc.rust-lang.org/book/ch19-06-macros.html?highlight=macro#macros)。
+ 在 Rust 中，不可恢复的错误由 `panic!` 宏表示。当程序遇到 `panic!` 时，它会停止运行，打印失败消息，展开，清理堆栈，然后退出。请参阅 [`panic!` 不可恢复的错误](https://doc.rust-lang.org/book/ch09-01-unrecoverable-errors-with-panic.html)。
+ 与其他编程语言不同，Rust 不支持从基类继承功能；Rust 通过 `traits` 提供方法重载。特性在概念上可视为类似于接口。但是，特性和真实接口存在差异，并且在设计过程中通常以不同的方式使用。请参阅[特性：定义共享行为](https://doc.rust-lang.org/book/ch10-02-traits.html)。
  + 多态性是指代码支持多种数据类型的功能，而无需单独为每种数据类型编写代码。Rust 通过枚举、特性和泛型支持多态性。请参阅[继承作为类型系统和代码共享](https://doc.rust-lang.org/book/ch17-01-what-is-oo.html?#inheritance-as-a-type-system-and-as-code-sharing)。
+ Rust 在内存方面非常显式。智能指针“是像指针一样起作用的数据结构，但也具有额外的元数据和功能”。请参阅[智能指针](https://doc.rust-lang.org/book/ch15-00-smart-pointers.html)。
  + 该类型`Cow`是一个 clone-on-write智能指针，可帮助在必要时将内存所有权转移给调用者。请参阅[https://doc.rust-lang.org/std/borrow/enum.Cow.html](https://doc.rust-lang.org/std/borrow/enum.Cow.html)。
  + 类型 `Arc` 是用于计算已分配实例的原子引用计数智能指针。请参阅[https://doc.rust-lang.org/std/sync/struct.Arc.html](https://doc.rust-lang.org/std/sync/struct.Arc.html)。
+ 适用于 Rust 的 SDK 经常使用生成器模式来构造复杂类型。

## 适用于 Rust 的 AWS SDK 箱子基础知识
<a name="aws-sdk-crate-fundamentals"></a>
+ 适用于 Rust 的 SDK 功能的主要核心 crate 是 `aws-config`。它之所以包含在大多数项目中，是因为它提供了从环境中读取配置的功能。

  ```
  $ cargo add aws-config
  ```
  + 不要将其与所谓 AWS 服务 AWS Config的混淆。由于这是一项服务，因此它遵循 AWS 服务 板条箱的标准惯例并被调`aws-sdk-config`用。
+ 适用于 Rust 的 SDK 库被每个 AWS 服务库分成不同的库箱。这些 crate 可通过 [https://docs.rs/](https://docs.rs/) 获取。
+ AWS 服务 板条箱遵循的命名惯例`aws-sdk-{{[servicename]}}`，例如`aws-sdk-s3`和。`aws-sdk-dynamodb`

## 用于使用的项目配置 AWS 服务
<a name="project-configuration-for-working-with-aws-services"></a>
+ 你需要在项目中为每个 AWS 服务 你想让你的应用程序使用的箱子添加一个 crate。
+ 添加 crate 的推荐方法是在项目目录中使用命令行运行 `cargo add {{[crateName]}}`，例如 `cargo add aws-sdk-s3`。
  + 这将向项目 `Cargo.toml` 中的 `[dependencies]` 下添加一行。
  + 默认情况下，这会将最新版本的 crate 添加到项目中。
+ 在源文件中，使用 `use` 语句将 crate 中的项目放入作用域。请参阅 Rust 编程语言网站上的[使用外部程序包](https://doc.rust-lang.org/book/ch07-04-bringing-paths-into-scope-with-the-use-keyword.html#using-external-packages)。
  + crate 名称通常使用连字符，但是在实际使用 crate 时，连字符会被转换为下划线。例如，`aws-config` crate 在代码 `use` 语句中使用，例如：`use aws_config`。
+ 配置是一个复杂的主题。配置可以直接在代码中进行，也可以在外部环境变量或配置文件中指定。有关更多信息，请参阅 [在外部配置适用于 Rust 的 AWS SDK 服务客户端](config-external.md)。
  + 当 SDK 加载配置时，系统会记录无效值，而不是停止执行，因为大多数设置都有合理的默认值。要了解如何启用日志记录功能，请参阅[在适用于 Rust 的 AWS SDK 中配置和使用日志记录](logging.md)。
  + 大多数环境变量和配置文件设置会在程序启动时加载一次。在重新启动程序之前，不会看到对这些值的任何更新。

## Tokio 运行时
<a name="tokio-runtime"></a>
+ Tokio 是适用于 Rust 的 SDK 编程语言的一个异步运行时，它执行 `async` 任务。请参阅 [tokio.rs](http://tokio.rs/) 和 [docs.rs/tokio](http://docs.rs/tokio)。
+ 适用于 Rust 的 SDK 需要异步运行时。建议您在项目中添加以下 crate：

  ```
  $ cargo add tokio --features=full
  ```
+ `tokio::main` 属性宏为程序创建一个异步主入口点。要使用此宏，请将其添加到 `main` 方法前面的行中，如下所示：

  ```
  #[tokio::main]
  async fn main() -> Result<(), Error> {
  ```