Rust 是一种现代的、安全的、高效的系统编程语言,它因其出色的特性和功能而受到越来越多开发者的关注。
Rust 之所以备受青睐,主要在于其出色的安全性和效率。Rust 静态类型检查和所有权系统能在编译时检查代码,避免了许多常见的编程错误,如空指针引用和缓冲区溢出等。这使得 Rust 成为编写安全、可靠和高质量软件的理想选择。同时,Rust 能够提供与 C 和 C++类似的性能,且拥有更好的内存安全和线程安全。这使得 Rust 成为编写高性能系统和网络应用程序的良好选择。
除此之外,Rust 还是一种非常适合并发编程的编程语言。由于其所有权系统,Rust 能够保证线程安全,这使得并发编程变得更加容易。同时,Rust 还提供了许多并发编程的原语,如通道和锁等,使得开发者能够更加轻松地编写高效的并发代码。这对于那些需要处理大规模数据的应用程序尤为重要。
最后,Rust 还适用于 Web 开发,拥有许多适用于 Web 开发的框架和库,如 Rocket、Actix 等,这使得开发者能够更加轻松地构建高性能、安全和可靠的 Web 应用程序。同时,由于 Rust 的高性能和内存安全,它也适用于开发分布式系统、物联网等领域。
总之,Rust 的出色特性和功能使其成为未来编程语言的重要选择。作为开发者,学习 Rust 是非常有必要的。同时,Rust 的社区正在迅速发展,越来越多的开发者正在关注和使用 Rust,这也为 Rust 的未来发展提供了无限可能。
i8
、i16
、i32
、i64
、i128
和无符号整数 u8
、u16
、u32
、u64
、u128
,以及 isize
和 usize
类型,它们的大小分别为 8、16、32、64、128 位。f32
和双精度浮点数 f64
。''
表示,大小为 4 个字节,支持 Unicode 字符集。""
表示,是一个动态可变的 UTF-8 字符串。true
和 false
。*const T
和 *mut T
,以及引用 &T
和可变引用 &mut T
。snake_case
snake_case
snake_case
PascalCase
PascalCase
PascalCase
snake_case.rs
foo.ts
pub struct Bar {
field1: i32,
field2: f64,
}
impl Bar {
pub fn new() -> Bar {
Bar {
field1: 0,
field2: 0.0,
}
}
pub fn get_field1(&self) -> &i32 {
&self.field1
}
pub fn get_field2(&self) -> &f64 {
&self.field2
}
}
mian.ts
mod foo;
use foo::{Bar};
fn main() {
let bar = Bar::new();
let field1 = bar.get_field1();
let field2 = bar.get_field2();
print!("{}",field1);
print!("{}",field2);
}
// 定义一个 trait
trait Animal {
fn make_sound(&self);
}
// 实现 Animal trait 的 Dog 类型
struct Dog {
name: String,
}
impl Animal for Dog {
fn make_sound(&self) {
println!("{} says woof!", self.name);
}
}
// 实现 Animal trait 的 Cat 类型
struct Cat {
name: String,
}
impl Animal for Cat {
fn make_sound(&self) {
println!("{} says meow!", self.name);
}
}
// 接受一个实现 Animal trait 的对象作为参数
fn make_animal_sound(animal: &dyn Animal) {
animal.make_sound();
}
fn main() {
let dog = Dog { name: String::from("Fido") };
let cat = Cat { name: String::from("Whiskers") };
make_animal_sound(&dog);
make_animal_sound(&cat);
}
fn main() {
let path_buf = std::env::current_dir().unwrap();
let current_path = path_buf.join("test.txt");
let result = fs::read_to_string(current_path).unwrap();
println!("With text:\n{}", result);
}
fn main() {
let path_buf = std::env::current_dir().unwrap();
let current_path = path_buf.join("target");
let dirs = fs::read_dir(current_path).unwrap();
for dir in dirs {
let entry = dir.unwrap();
let file_path = entry.path();
println!("File name: {}", file_path.display());
}
}
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
// 创建一个新的线程安全共享引用计数的智能指针的函数
let data = Arc::new(Mutex::new(vec![1, 2, 3]));
let handles: Vec<_> = (0..3)
.map(|i| {
let data = data.clone();
// move关键词将闭包的所有权转移给新线程,保证了闭包内部使用的变量不会在创建新线程后被释放。
thread::spawn(move || {
let mut data = data.lock().unwrap();
data[i] += 1;
})
})
.collect();
// 等待线程执行结束
for handle in handles {
handle.join().unwrap();
}
println!("{:?}", data);
}
[dependencies]
mysql = "*"
use mysql::{from_row, params, Pool, Value};
use mysql::prelude::Queryable;
#[derive(Debug, PartialEq, Eq)]
struct User {
name: String,
age: i32,
}
fn main() {
// 连接 MySQL 数据库
let url = "mysql://root:123456@localhost:3306/demo";
let pool = Pool::new(url).unwrap();
let mut conn = pool.get_conn().unwrap();
// 插入数据
conn.exec_drop(
"INSERT INTO demo (name, age) VALUES (?, ?)",
(Value::from("Alice"), Value::from(18)),
).unwrap();
// 查询数据
let stmt = conn
.prep("SELECT name, age FROM demo WHERE age > :age")
.unwrap();
let rows = conn.exec_iter(&stmt, params! { "age" => 20 }).unwrap();
for row in rows {
let (name, age): (String, i32) = from_row(row.unwrap());
println!("{} is {} years old", name, age);
}
// 更新数据
conn.exec_drop(
"UPDATE demo SET age = ? WHERE name = ?",
(Value::from(20), Value::from("Alice")),
).unwrap();
// 删除数据
conn.exec_drop("DELETE FROM demo WHERE age = ?", (Value::from(20), )).unwrap();
}