add basic/intro content

pull/89/head
sunface 3 years ago
parent 96d4a48a3a
commit 22fc142017

@ -13,34 +13,38 @@
## Rust学习三部曲
- [基本概念](basic-concepts/intro.md)
- [变量与类型](basic-concepts/variable-type.md)
- [结构体、枚举](basic-concepts/struct-enum.md)
- [函数与方法](basic-concepts/function-method.md)
- [格式化输出](basic-concepts/formatted-output.md)
- [字符串、数组与切片](basic-concepts/string-array-slice.md)
- [流程控制](basic-concepts/flow-control.md)
- [返回、异常和错误](basic-concepts/exception-error.md)
- [模式匹配](basic-concepts/match-pattern.md)
- [文档注释](basic-concepts/comment.md)
- [包和模块](basic-concepts/crate-module.md)
- [核心概念](core-concepts/intro.md)
- [所有权](core-concepts/ownership.md)
- [借用](core-concepts/borrowing.md)
- [生命周期](core-concepts/lifetime.md)
- [基本概念](basic/intro.md)
- [变量绑定](basic/variable.md)
- [基本类型](basic/type.md)
- [复合类型](basic/compound-type.md)
- [函数与方法](basic/function-method.md)
- [格式化输出](basic/formatted-output.md)
- [字符串、数组与切片](basic/string-array-slice.md)
- [流程控制](basic/flow-control.md)
- [返回、异常和错误](basic/exception-error.md)
- [模式匹配](basic/match-pattern.md)
- [文档注释](basic/comment.md)
- [包和模块](basic/crate-module.md)
- [语句与表达式](basic/statement-expression.md)
- [核心概念](core/intro.md)
- [所有权](core/ownership.md)
- [借用](core/borrowing.md)
- [生命周期](core/lifetime.md)
- [进阶编程](advanced-concepts/intro.md)
- [泛型](advanced-concepts/generitic.md)
- [特征](advanced-concepts/trait.md)
- [迭代器](advanced-concepts/interator.md)
- [集合类型](advanced-concepts/collection.md)
- [函数式编程](advanced-concepts/functional-programing.md)
- [智能指针](advanced-concepts/smart-pointer.md)
- [多线程](advanced-concepts/threads.md)
- [测试](advanced-concepts/tests.md)
- [错误处理](advanced-concepts/errors.md)
- [](advanced-concepts/macro.md)
- [进阶编程](advance/intro.md)
- [泛型](advance/generitic.md)
- [特征](advance/trait.md)
- [迭代器](advance/interator.md)
- [集合类型](advance/collection.md)
- [函数式编程](advance/functional-programing.md)
- [智能指针](advance/smart-pointer.md)
- [多线程](advance/threads.md)
- [测试](advance/tests.md)
- [错误处理](advance/errors.md)
- [](advance/macro.md)
- [Bypass Borrow Checker](advance/bypass-borrow.md)
- [常用三方库列表](advance/utils.md)
## 专题内容
@ -54,12 +58,13 @@
- [配置参数](cargo/manifest.md)
- [性能调优](performance/intro.md)
- [Benchmark性能测试](performance/benchmark.md)
- [减少Runtime check](performance/runtime-check.md)
- [Unsafe](unsafe/intro.md)
- [原始指针](unsafe/raw-pointer.md)
- [宏编程](macro/intro.md)
- [过程宏](macro/procedure-macro.md)
- [常用三方库](third-party/intro.md)
- [serde](third-party/serde.md)
## 场景模版

@ -0,0 +1 @@
# 绕过借用检查

@ -0,0 +1,12 @@
## 常用三方库
本章节对在日常开发中我们会用到的三方库进行简单介绍,详细使用介绍请参看
### JSON
1. [serde](https://github.com/serde-rs/serde)
### 命令行参数和配置
1. [structopt](https://github.com/TeXitoi/structopt)
### HTTP client
1. [reqwest](https://github.com/seanmonstar/reqwest)

@ -0,0 +1,45 @@
# Rust基本概念
本章主要介绍Rust的基础语法、数据类型、项目结构等学完本章你将对Rust代码有一个清晰、完整的认识。
在基本概念方面Rust和其它语言并没有大的区别它拥有变量、数据、函数等等。
通过下面的代码我们来简单浏览下Rust的语法:
```rust
// rust程序入口函数跟其它语言一样都是main该函数目前无返回值
fn main() {
// 使用let来声明变量进行绑定a是不可变的
// 此处没有指定a的类型编译器会默认根据a的值为a推断类型i32有符号32位整数
// 语句的末尾必须以分号结尾
let a = 10;
// 主动指定b的类型为i32
let b: i32 = 20;
// 这里有两点值得注意:
// 1. 可以在数值中带上类型:30i32表示数值是30类型是i32
// 2. c是可变的mut是mutable的缩写
let mut c = 30i32;
// 还能在数值和类型中间添加一个下划线,让可读性更好
let d = 30_i32;
// 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
let e = add(add(a, b), add(c, d));
// println!是宏调用,看起来像是函数但是它返回的是宏定义的代码块
// 该函数将指定的格式化字符串输出到标准输出中(控制台)
// {}是占位符在具体执行过程中会把a的值代入进来
println!("( a + b ) + ( c + d ) = {}", e);
}
// 定义一个函数输入两个i32类型的32位有符号整数返回它们的和
fn add(i: i32, j: i32) -> i32 {
// 返回相加值这里可以省略return
i + j
}
```
> 注意
在上面的`add`函数中,不要为`i+j`添加`;`,这会改变语法导致函数返回`()`而不是`i32`,具体参见[语句和表达式](./statement-expression.md)
还有几点可以留意下:
- 字符串使用双引号`""`而不是单引号`''`.Rust中单引号是留给单个字符类型(`char`)使用的
- Rust使用`{}`来作为占位符,其它语言可能使用的是`%s``%d`,`%p`等,因为`println!`会自动推导出具体的类型, 无需手动指定

@ -0,0 +1 @@
# statement-expression.md

@ -0,0 +1 @@
# 基本类型

@ -0,0 +1 @@
# 减少runtime check

@ -0,0 +1 @@
## 常用三方库

@ -0,0 +1 @@
## serde

@ -1 +1,11 @@
# 为何又多了一本书?
# 为何又多了一本书?
与国外的Rust发展如火如荼相比国内的近况不是特别理想。
导致目前这种状况的原因,我认为有:
1. 上手难度大,学习曲线陡峭
2. 中文资料少,英文资料难学(基于原因1)
3. 没有体系化的学习路线,新人往往扫完一遍入门书籍,就不知道何去何从
4. 缺少一个活跃的社区
因此我联合几个朋友一起创建了Rust中文社区(Rust Cn Members)

@ -0,0 +1,25 @@
## 可以通过move struct中的字段来解决borrow和mut borrow无法共存的问题
```rust
struct Foo {
bar: Bar
}
let bar: &Bar = &foo.bar;
let foo_mut: &mut Foo = &mut foo; // Cant do it.
println!("{}{}", foo_mut, bar);
```
If you no longer need Bar as a field of Foo, you can move it out instead of borrowing. This way you will be able to obtain Bar and still be able to mutate Foo.
```rust
struct Foo {
bar: Option<Bar>
}
let bar: Bar = foo.bar.take(); // sets option to None
let foo_mut: &mut Foo = &mut foo;
println!("{}{}", foo_mut, bar);
```
Loading…
Cancel
Save