乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Rust 05.00 错误处理
2023-02-05 10:10:59
35
0
0
admin
> 可恢复错误和不可恢复错误 ``` 可恢复错误使用Result<T,E>来返回给调用者,让调用者决定如何处理,不可恢复错误直接panic ``` # panic ```rust panic!("121"); //报错,退出 let f = File::open("a.txt").unwrap(); //有问题就报标准错误,退出 let f = File::open("a.txt").expect("xxx"); //有问题就报自定义错误,退出 ``` **如果希望panic 的时候立刻终止,而不做内存展开清理的工作,或者希望二进制包尽可能的小** ``` cat Cargo.toml ... [profile.release] panic = 'abort' ... ``` # Result ``` enum Result<T,E> { Ok(T), Err(E), } ``` ```rust use std::fs::File; use std::io::ErrorKind; fn main() { let f = File::open("a.txt"); let f = match f { Ok(file) => file, Err(error) => match error.kind() { ErrorKind::NotFound => {panic!("Error:{:?}",ErrorKind::NotFound)}, other_error => {panic!("Error:{:?}",other_error)}, }, }; } ``` ```rust use std::fs; fn main() { match a(2) { Ok(x) => {println!("{:?}",x);} Err(e) => {println!("{:?}",e);} } } fn a(n:i32) -> Result<String,String> { match fs::read_to_string("/tmp/a.txt") { Ok(text) => { return Ok(text);} Err(e) => { if n == 1 { return Err("lala".to_string());} else { return Err(e.to_string());} } } } ``` ```rust let mut f = match f { Ok(file) => file, Err(e) => return Err(e), // 将错误直接返回给调用者,让调用者决定下一步干啥 } let mut f = File::open("a.txt")?; //和上面意思一样 // ?操作符 如果返回的是result 的OK,那么返回OK中的值,如果是Err,则直接把整个Err 返回 ```
上一篇:
Rust 04.02 将模块拆分为不同的文件
下一篇:
Rust 06.00 泛型
文档导航