crate
库(箱)
库中包含文件:
crate
└── front_of_house
├── hosting
│ ├── add_to_waitlist
│ └── seat_at_table
└── serving
├── take_order
├── serve_order
└── take_payment
宏
#[macro_use]
使用#[macro_use] 可以使被注解的module模块中的宏被应用(替换)到当前作用域中;
或者注释crate中的宏应用到当前crate作用域中。
总之:
1,引入其他文件(模块)定义的宏
2,引入其他库的宏。
#[macro_use]
extern crate log;
引入log库中的宏
#[macro_export]
在每个宏定义前面添加 #[macro_export]注释,表示这些宏可以被外部的 crate 使用。
anyhow
anyhow库中包含有有一些Error特征,包括Result<T,E>.
而且使用起来更方便。
引入anyhow之后,使用Result<T, anyhow::Error>
等价于anyhow::Result<T>,不影响Ok()的返回
使用需引入依赖包:
[dependencies]
anyhow = "1.0"
cfg---条件编译
就是按照指定的条件进行编译,它允许你基于一个传递给编译器的标记编译代码。
所有的#[ ]都是标注者位置以下的代码的属性。
条件编译可能通过两种不同的操作:
cfg
属性:在属性位置中使用#[cfg(...)]
cfg!
宏:在布尔表达式中使用cfg!(...)
fn main(){
#[cfg(not(windows))]
println!("do--not windows");
#[cfg(linux)]
println!("do--linux");
if cfg!(target_os="linux"){
println!("cfg!--linux");
}
if cfg!(target_os="windows"){
println!("cfg!--windows");
}
}
cfg!一定要有的等号
注意有等号时有""
使用不需要引入模块
use
指定路径两种方法:
1,::
2,{ }
mod windiws{
pub mod ipc;
}
std
fs
所有文件操作只需要引入:
File,OpenOptions
use std::fs::{File,OpenOptions};
fn main(){
let file=OpenOptions::new().read(true).write(true).create(true).open("foo.txt");
}
serde_json::from_str
用字符串给匹配给某个数据类型
use serde::{Deserialize,Serialize};
use serde_json::{self,Result};
use anyhow;
#[derive(Deserialize, Debug)]
struct Student{
name:String,
age:i32
}
fn main()->anyhow::Result<()>{
let s=r#"{"name":"fangfang","age":12}"#;
let st1:Student=serde_json::from_str(s)?;
println!("{:?}",st1);
Ok(())
}
1,main函数有返回值就一定要在函数名之后加上返回值;
2,使用的字符串一定要用R# #包起来;
3,数据结构的字段用”“引起了,:后面是字段值