1. 程式人生 > 其它 >目錄和模組組織

目錄和模組組織

技術標籤:rust# rust語言# rust實戰rust

目錄和模組組織


提示

所有帖子都會不定期新增補充實戰過程中發現的新內容,力爭一篇文章涵蓋所有內容,避免你多次查詢文章,所以最好點贊或收藏,時不時回來看看。


廢話

我們寫程式,總會分目錄和modules,rust裡有packages、crates、modules這幾個組織關係,
packages: 通過cargo new 建立;
crates: 通過cargo new --lib 建立;
modules: 通過關鍵字mod定義;
下面以實際例子說說rust裡是如何組織目錄和模組的。

程式碼檔案目錄結構

假如我們的程式程式碼由主程式和一個Lib組成,通過cargo new windows和cargo new --lib hc建立後都放在pro目錄下,各自的檔案結構目錄如下
在這裡插入圖片描述
為了使用hc這個lib下的檔案,需要在windows目錄下的Cargo.toml裡標明lib位置:

[dependencies]
hc = {version = "1.0", path = "../hc"}

各檔案內容依次如下,我儘量把各種相互引用的情況都寫在了裡面,看不明白的請留言

hc目錄下的檔案

//檔案 hc\src\buttons.rs
use crate::controls;
pub struct Button { text: String, } pub struct ImageButton { button: Button, }
//檔案 hc\src\controls.rs
use crate::buttons::{Button, ImageButton};
//檔案 hc\src\lib.rs
pub mod buttons;
pub mod controls;

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}

windows目錄下的檔案,其中mod.rs是用來對外公開其所在目錄裡的檔案(main.rs和lib.rs其實也有這個功能)

//檔案 windows\src\api\mod.rs
pub mod write;
pub mod read;
//檔案 windows\src\api\read.rs
use write;

pub struct Read {

}
//檔案 windows\src\api\write.rs
use super::super::form;
use super::read;  // super表示api

pub struct Write {
    
}

pub mod writebyte {  // 內部的子模組,pub表示對外暴露
    pub struct WriteByte {

    }
}
//檔案 windows\src\form.rs
use crate::gdigraphics::{GDICanvas,};

pub struct Form {

}
//檔案 windows\src\gdigraphics.rs
use hc::buttons::{Button, ImageButton};

pub struct GDICanvas {

}
//檔案 windows\src\main.rs
pub mod form;
mod gdigraphics;
mod api;
use api::write;
use api::write::writebyte;
use self::form::Form;
use crate::gdigraphics::GDICanvas;

fn main() {

}