关于Rust的项目结构的笔记

层级

  • Package
  • Crate
  • Module
  • Path

Package

cargo的特性, 构建、测试、共享Crate

组成:

  • 一个 Cargo.toml 文件, 描述了如何构建这些 Crates
  • 至少包含一个 crate
  • 最多只能包含一个 library crate
  • 可以包含任意个 binary crate

cargo new demo-pro

会产生一个名为 demo-pro 的 Package

目录结构如下:
在这里插入图片描述

cargo 的惯例:

  1. src/main.rs 是 binary crate 的 crate root
    且此crate的名称与package名一致

  2. src/lib.rs 是 library crate 的 crate root (此文件需要自己创建)
    且此crate的名称与package名一致

cargo 会把 crate root 文件交给 rustic 来构建 library 或 binary

  1. 一个package 可以有多个 binary crate
    在这里插入图片描述

Crate

一个模块树, 可以产生一个 library 或 可执行文件


Crate 类型:

  • binary 二进制文件
  • library 库文件

Crate Root:

  • 是源代码文件
  • rustc 从这里开始组成项目的根Module

Module

控制代码的组织、作用域、私有路径


  • 在一个 crate 内可以将代码进行分组
  • 易于复用
  • 控制项目私有性
  • 使用 mod 关键字进行创建
  • 可以嵌套
  • 可以包含其他项的定义(struct , enum, trait, fn)

案例1:

src/lib.rs

mod front_of_house {mod hosting {fn add_to_waitlist() {}fn seat_at_table() {}}mod serving {fn take_order() {}fn serve_order() {}fn take_payment() {}}
}

在这里插入图片描述

案例2:

src/lib.rs

pub mod front_of_house {pub mod hosting {pub fn add_to_waitlist() {}pub fn seat_at_table() {}}pub mod serving {pub fn take_order() {}pub fn serve_order() {}pub fn take_payment() {}}
}pub fn eat_at(){crate::front_of_house::hosting::add_to_waitlist();
}

src/main.rs

fn eat_at2(){demo_pro::front_of_house::hosting::add_to_waitlist();
}fn main() {eat_at2();
}

案例3: super

src/lib.rs

pub mod front_of_house {fn method1() {}pub mod hosting {fn method2() {}pub fn method3() {method2();super::method1();// orcrate::front_of_house::method1();}}
}

案例4 use 关键字

src/lib.rs

pub mod front_of_house {fn method1() {}pub mod hosting {fn method2() {}pub fn method3() {method2();super::method1();// orcrate::front_of_house::method1();}}
}use crate::front_of_house::hosting;pub fn eat_at3(){hosting::method3();
}

src/main.rs

use std::collections::HashMap;fn main() {let mut map = HashMap::new();map.insert(1, 2);
}

案例5 as 关键字

src/main.rs

use std::collections::HashMap as MyMap;fn main() {let mut map = MyMap::new();map.insert(1, 2);
}

案例6 pub use

重新导出

案例7 将模块重新拆分为不同文件

理论:
在这里插入图片描述

  1. 一级拆分 (等同案例4的效果)

在这里插入图片描述

src/lib.rs

pub mod front_of_house;use crate::front_of_house::hosting;pub fn eat_at3(){hosting::method3();
}

src/front_of_house.rs

fn method1() {}pub mod hosting {fn method2() {}pub fn method3() {method2();super::method1();// orcrate::front_of_house::method1();}
}
  1. 二级拆分 (等同案例2的效果)

在这里插入图片描述

src/lib.rs

pub mod front_of_house;pub fn eat_at(){crate::front_of_house::hosting::add_to_waitlist();
}

src/front_of_house.rs

pub mod hosting;pub mod serving;

src/front_of_house/hosting.rs

pub fn add_to_waitlist() {}
pub fn seat_at_table() {}

src/front_of_house/serving.rs

pub fn take_order() {}
pub fn serve_order() {}
pub fn take_payment() {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】linux内核pci_set_master

一、__pci_set_master static void __pci_set_master(struct pci_dev *dev, bool enable) {u16 old_cmd, cmd;pci_read_config_word(dev, PCI_COMMAND, &old_cmd); // 读取设备的PCI命令寄存器的当前值if (enable)cmd old_cmd | PCI_COMMAND_MASTER; // 如果要启用总线…

力扣● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 与496.下一个更大元素 I的不同是要循环地搜索元素的下一个更大的数。那么主要是对于遍历结束后,单调栈里面剩下的那些元素。 如果直接把两个数组拼接在一起,然后使用单调栈求下一个最大值就可以。 代码实现的话,不用直…

蓝桥杯练习——神秘咒语——axios

目标 完善 index.js 中的 TODO 部分,通过新增或者修改代码,完成以下目标: 点击钥匙 1 和钥匙 2 按钮时会通过 axios 发送请求,在发送请求时需要在请求头中添加 Authorization 字段携带 token,token 的值为 2b58f9a8-…

瑞_23种设计模式_状态模式

文章目录 1 状态模式(State Pattern)1.1 介绍1.2 概述1.3 状态模式的结构1.4 状态模式的优缺点1.5 状态模式的使用场景 2 案例一2.1 需求2.2 代码实现(未使用状态模式)2.3 代码实现(状态模式) 3 案例二3.1 …

[BT]BUUCTF刷题第4天(3.22)

第4天(共两题) Web [极客大挑战 2019]Upload 这是文件上传的题目,有一篇比较详细的有关文件上传的绕过方法文件上传漏洞详解(CTF篇) 首先直接上传带一句话木马的php文件,发现被拦截,提示不是图…

Linux安装Nacos

安装前必要准备 准备Java环境 ,8以上的版本,mysql(集群相关信息),nginx(进行代理) 安装Nacos 首先我们要有一个nacos的包,我们可以在线下载,也可以提前下载好&#xf…

Nginx 全局块配置 worker 进程的两个指令

1. 前言 熟悉 nginx 运行原理的都知道,nginx 服务启动后,会有一个 master 进程和多个 worker 进程,master 进程负责管理所有的 worker 进程,worker 进程负责处理和接收用户请求 在这里我们所要研究的是 master 进程一定要创建 wo…

如何进行设备的非对称性能测试

非对称性能测试介绍 RFC2544是RFC组织提出的用于评测网络互联设备(防火墙、IDS、Switch等)的国际标准。主要是对RFC1242中定义的性能评测参数的具体测试方法、结果的提交形式作了较详细的规定。标准中定义了4个重要的参数:吞吐量&#xff08…

Uni-app/Vue/Js本地模糊查询,匹配所有字段includes和some方法结合使用e

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.第一步 需要一个数组数据 {"week": "全部","hOutName": null,"weekendPrice": null,"channel": "门市价","hOutId": 98,"cTime": "…

打造新质生产力,亚信科技2024年如何行稳致远?

引言:不冒进、不激进,稳扎稳打, 一个行业一个行业地深度拓展。 【全球云观察 | 科技热点关注】 基于以往“一巩固、三发展”的多年业务战略,亚信科技正在落实向非通信行业、标准产品、软硬一体产品和国际市场的“四…

Spring异步注解@Async线程池配置

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 从Spring3开始提供了@Async注解,该注解可以被标注在方法上,以便异步地调…

多段智能功率分配,双设备同时快充,乐得瑞LDR6020 一分拖二PD 快充线方案

随着移动设备的普及和功能的日益增强,电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求,各大厂商纷纷推出了各种快充技术和产品。在这个背景下,乐得瑞公司推出了一款名为LDR6020的一分二PD快充线方案,该方案采用…

处理登录失效后提示多个错误

问题: 我的场景是后端规定,即使登录失效返回的code仍是200,然后data的code是999什么的; 原本代码: 修改版代码: 通过节 const NotLoginEvent () > {router.replace("/login");localStorage.clear();M…

python的ITS 信息平台的设计与实现flask-django-nodejs-php

第二,陈列说明该系统实现所采用的架构、系统搭建采用的服务器、系统开发环境和使用的工具,以及系统后台采用的数据库。 最后,对系统进行全面测试,主要包括功能测试、查询性能测试、安全性能测试。 分析系统存在的不足以及将来改进…

ios symbolicatecrash 符号化crash

一、准备 1.1 .crash 文件获取 设备连接电脑 打开XCode, 依次 XCode -> Windows -> Device and Simulator -> Open Recent Logs 找到 (对应app名+时间点) -> 右键 Show in Finder 1.2 .dSYM 和 .app 文件获取 .dSYM是十六进制函数地址映射信息的中转文件,调试的…

中国光伏展

河北省京津冀国际光伏展是一场专注于光伏产业的展览会。作为中国光伏行业的重要展会之一,该展会旨在推动京津冀地区光伏产业的发展,促进光伏技术的交流与合作。 光伏展将汇集来自国内外的光伏企业、科研机构、专家学者等相关人士,展示最新的光…

Jetson AGX ORIN 配置 FGVC-PIM 神经网络

Jetson AGX ORIN 配置 FGVC-PIM 神经网络 文章目录 Jetson AGX ORIN 配置 FGVC-PIM 神经网络配置 ORIN 环境创建 FGVC-PIM 虚拟环境安装 PyTorch安装 torchvision安装其他依赖包 配置 ORIN 环境 首先先配置 ORIN 的环境,可以参考这个链接: Jetson AGX …

nuclei使用方法

nuclei使用方法 查看帮助 nuclei -h 列出所有模板 nuclei -tl 查找某种cms的相关漏洞模板,wordpress为例 nuclei -tl -tc "contains(name,wordpress)"便会列出内容里含有wordpress关键字的漏洞检测模板 使用与某cms相关的所有漏洞模板进行扫描&#…

基于Lealfet.js展示Turf.js生成的平滑曲线实践

目录 前言 一、问题的由来 1、创建网页框架 2、创建map对象 3、构建点位,生成路线 二、Turf.js平滑曲线改造 1、官网方法介绍 2、0.4弯曲度曲线 3、0.85弯曲度曲线 4、0.1度弯曲曲线 5、综合对比 总结 前言 在很多的关于路线的gis应用中,我们…

开源项目ChatGPT-Next-Web的容器化部署(三)-- k8s deployment.yaml部署

一、说在前面的话 有了docker镜像,要把一个项目部署到K8S里,主要就是编写deployment.yaml。 你需要考虑的是: 环境变量服务的健康检测持久化启动命令程序使用的数据源程序使用的配置文件 因为本前端项目比较简单,这里只做一个…