rust包

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.

而且使用起来更方便。

引入anyhow之后,使用Result等价于anyhow::Result,不影响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,数据结构的字段用”“引起了,:后面是字段值

你可能感兴趣的:(java,servlet,数据库)