JKSJ-Rust训练营(1期同步更新)
获取ZY↑↑方打开链接↑↑
Rust 是一门系统级编程语言,以其安全性、高性能和现代化的编程特性而闻名。Rust 设计之初就致力于解决 C/C++ 中常见的内存安全问题,同时提供了类似于 C/C++ 的运行速度。对于想要从事系统编程、游戏开发、网络服务器开发等领域的人来说,学习 Rust 是一个很好的选择。
Rust 程序设计的基本要素
1. 变量声明
在 Rust 中,变量默认是不可变的,可以通过 let 关键字声明变量:
rust浅色版本fn main() { let x = 5; // 不可变变量 println!("The value of x is: {}", x);}
如果你想声明一个可变变量,需要加上 mut 关键字:
rust浅色版本fn main() { let mut y = 5; y = 6; // 修改变量值 println!("The value of y is: {}", y);}
2. 数据类型
Rust 支持多种数据类型,包括整型、浮点型、布尔型、字符型等:
rust浅色版本fn main() { let integer: i32 = 10; let float: f64 = 3.14; let boolean: bool = true; let character: char = 'A';}
3. 函数定义
函数使用 fn 关键字定义,并可以返回一个值:
rust浅色版本fn add_one(x: i32) -> i32 { x + 1}fn main() { let result = add_one(5); println!("The result is: {}", result);}
4. 条件语句
Rust 支持 if 和 else 语句:
rust浅色版本fn main() { let number = 3; if number < 5 { println!("number is less than five"); } else { println!("number is greater than or equal to five"); }}
5. 循环语句
Rust 支持 for 和 while 循环:
rust浅色版本fn main() { let mut count = 0; while count < 5 { println!("count is: {}", count); count += 1; } for number in 1..=5 { println!("number is: {}", number); }}
6. 数组与向量
数组和向量都是用来存储一系列元素的数据结构,但向量是动态大小的:
rust浅色版本fn main() { let numbers = [1, 2, 3, 4, 5]; // 数组 println!("The third element is: {}", numbers[2]); let mut vector = vec![1, 2, 3]; // 向量 vector.push(4); println!("The length of the vector is: {}", vector.len());}
7. 所有权与借用
所有权(Ownership)和借用(Borrowing)是 Rust 中独特的概念,用于确保内存安全:
rust浅色版本fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); // 借用 s1 println!("The length of '{}' is {}.", s1, len);}fn calculate_length(s: &String) -> usize { s.len()}
8. 模式匹配
Rust 支持强大的模式匹配功能:
rust浅色版本fn main() { let number = Some(5); match number { Some(i) => println!("Matched, i = {:}", i), None => println!("None value"), }}
9. 错误处理
Rust 使用 Result 和 Option 类型来处理错误:
rust浅色版本fn divide(x: i32, y: i32) -> Result<i32, &'static str> { if y == 0 { Err("Cannot divide by zero") } else { Ok(x / y) }}fn main() { let result = divide(10, 0); match result { Ok(value) => println!("The result is {}", value), Err(e) => println!("Error: {}", e), }}
实战案例:实现一个简单的HTTP服务器
介绍
我们将使用 hyper 库来实现一个简单的HTTP服务器。hyper 是一个流行的 Rust HTTP 库,支持 HTTP/1.x 和 HTTP/2。
安装依赖
首先,我们需要在 Cargo.toml 文件中添加 hyper 依赖:
toml浅色版本[dependencies]hyper = "0.14"tokio = { version = "1", features = ["full"] }
编写服务器代码
创建一个名为 main.rs 的文件,并编写以下代码:
rust浅色版本use hyper::{Body, Response, Server};use hyper::service::{make_service_fn, service_fn};use hyper::{Method, StatusCode};use std::convert::Infallible;use std::net::SocketAddr;async fn handle(_: hyper::Request<Body>) -> Result<hyper::Response<Body>, Infallible> { let response = match Method::GET { Method::GET => Response::new(Body::from("Hello, World!")), _ => Response::builder() .status(StatusCode::NOT_FOUND) .body(Body::empty()) .unwrap(), }; Ok(response)}#[tokio::main]async fn main() { let addr = SocketAddr::from(([127, 0, 0, 1], 8080)); let make_service = make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(handle)) }); let server = Server::bind(&addr).serve(make_service); if let Err(e) = server.await { eprintln!("server error: {}", e); }}
运行服务器
运行以下命令来启动服务器:
bash浅色版本cargo run
然后,打开浏览器并访问 http://localhost:8080,你应该可以看到 "Hello, World!" 的输出。
总结
以上介绍了 Rust 的基本语法和一些常用功能,以及如何使用 Rust 和 hyper 库来实现一个简单的 HTTP 服务器。通过这些例子,你可以开始探索 Rust 的更多特性和应用。随着你对 Rust 的理解和经验的增长,你可以尝试更复杂的项目,如游戏开发、网络应用等。