但是,大家先来畅想一下使用它进行包括后的类型长什么样? 大概,可能,长这样:`Arc<Mutex<HashMap<String,Bytes>>>`,天哪噜,一不小心,你就遇到了 Rust 的阴暗面:类型大串烧。可以想象,如果要在代码中到处使用这样的类型,可读性会极速下降,因此我们需要一个[类型别名](https://course.rs/advance/custom-type.html#类型别名type-alias)( type alias )来简化下:
但是,大家先来畅想一下使用它进行包裹后的类型长什么样? 大概,可能,长这样:`Arc<Mutex<HashMap<String,Bytes>>>`,天哪噜,一不小心,你就遇到了 Rust 的阴暗面:类型大串烧。可以想象,如果要在代码中到处使用这样的类型,可读性会极速下降,因此我们需要一个[类型别名](https://course.rs/advance/custom-type.html#类型别名type-alias)( type alias )来简化下:
```rust
use bytes::Bytes;
use std::collections::HashMap;
@ -35,7 +35,7 @@ type Db = Arc<Mutex<HashMap<String, Bytes>>>;
此时,`Db` 就是一个类型别名,使用它就可以替代那一大串的东东,等下你就能看到功效。
接着,我们需要在 `main` 函数中对 `HashMap` 进行初始化,然后使用 `Arc` 克隆一份它的所有权并将其传入到生成的异步任务中。事实上在 Tokio 中,这里的 `Arc` 被称之为 **handle**,或者更宽泛的说,`handle` 在 Tokio 中可以用来访问某个共享状态。
接着,我们需要在 `main` 函数中对 `HashMap` 进行初始化,然后使用 `Arc` 克隆一份它的所有权并将其传入到生成的异步任务中。事实上在 Tokio 中,这里的 `Arc` 被称为 **handle**,或者更宽泛的说,`handle` 在 Tokio 中可以用来访问某个共享状态。