350 字
1 分钟
【Rust】学一会Rust

#0 前言#

碎碎念#

学rust可能和目前的任务没有关联,但是毕竟是编程原神,占个坑(

学习参考教程:https://www.bilibili.com/video/BV1m1sreSEoh

# 1 Rust 简介#

rust 是一门低级别的系统语言

特点:性能、安全性、开发者友好、健壮的生态

  • 内存安全,不牺牲性能
  • 编译通过就能正常运行

# 2 Rust 程序结构#

第一个项目#

rust最终会创建crate,一个项目里包含:

​ 一个library crate (库crate) ​ 多个binary crate (可执行crate)

use std::io::stdin;
fn main() {
let mut msg = String::new();
println!("Please enter your message:");
stdin().read_line(&mut msg).unwrap();
println!("Message is {}", msg);
}

猜数字#

导入库#

Prelude:导入到每个rust程序的集合,可以直接使用而不用显式导入

use std::io;// 非prelude,需要显式导入

打印文本#

println!("Guess the number");//宏

创建变量#

let mut = String::new();

let:创建变量 mut:创建能多次赋值的变量

获取输入#

io::stdin()
.read_line(&mut guess)// 传入引用,返回Result类型
.expect("Failed to read line");// 失败处理

Result<返回的result必须处理> --- OK(usize) --- Err

导入rand库#

/Cargo.toml

到[dependencies]加入:

rand = "0.8.5"

或者到终端使用

Terminal window
cargo add rand

获取库:crates.io网站获取

use rand::Rng;// Rng是trait(类似interface)

生成随机数#

let secret_number = rand::thread_rng().gen_range(1..101);

范围表达式:

1..101:1num<1011\le num < 101

1..=100:1num1001 \le num \le 100

类型转换#

let guess:u32 = guess.trim().parse().expect("Please type a number!");

guess:显式转换guess为u32类型(无符号整数类型)

shadowing(遮蔽):重新使用上面的guess变量

trim:去除空白

判断逻辑#

use std::cmp::Ordering;

引入枚举Ordering

match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => println!("You win!"),
}

match:类似switch,匹配分支并执行

cmp:比较大小,返回guess相对给定数是大了还是小了

完整程序#

use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
//println!("The secret number is: {}", secret_number);
loop {
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Please type a number!");
continue;
}
};
println!("You guessed: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
}
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【Rust】学一会Rust
https://blog.lwrzgocloud.top/posts/rust-xueyihuirust/
作者
Lwrzgo
发布于
2025-08-09
许可协议
Unlicensed

部分信息可能已经过时

相关文章 智能推荐
1
【C++】C++要领(施工中)
计算机语言学习 梳理了C++核心语法要点,涵盖变量类型、数组与字符串、结构体、指针、动态内存管理、函数(含重载、模板、引用传递)、名称空间及文件输入输出等,强调现代C++特性如auto、vector、array和const安全实践。
2
【CTF】PHP命令执行(施工中)
CTF学习 介绍了PHP中常见的命令执行危险函数(如system、exec、passthru等)的语法、回显特性及使用条件,并重点讲解了在函数被过滤或disable_functions启用时的绕过方法,包括利用未禁用函数、文件包含及LD_PRELOAD劫持动态链接库等高级技巧。
3
【Java】Java学习笔记(未完成)
计算机语言学习 系统介绍了Java中类与对象的基本概念,包括属性(成员变量)的定义与默认值、对象的创建与内存分配(栈、堆、方法区),以及成员方法的定义、调用、重载、可变参数和递归等特性,并对比了全局变量(属性)与局部变量的作用域及初始化规则。
4
【CTF】刷题 WriteUP - WEB 篇(4.8更新)
CTF学习 CTFshow - WEB 刷题
5
【CTF】SQL注入学习笔记(进行中)
CTF学习 梳理了SQL注入的基础知识与实战技巧,涵盖MySQL数据库操作、注入点判断(字符型/数字型)、闭合方式识别,以及Union联合注入、报错注入(extractvalue/updatexml/floor)、布尔盲注、时间盲注等多种攻击手法,并简要介绍了文件写入获取Web Shell及HTTP头注入等进阶利用方式。

目录