Rust之包,箱和模块管理(一):包和箱

【Rust】007-包管理与模块管理 【Rust】007-包管理与模块管理文章目录【Rust】007-包管理与模块管理一、包管理器:Cargo1、简介Cargo 官方文档仓库2、项目初始化3、写一个小程序任务目标寻找合适的库添加库到我们的项目中代码实现`cargo run`运行二、模块管理1、概述2、文件作为模块第一步:创建文件 `apple.rs`第二步:创... 阅读详情

开发环境

  • Windows 10
  • Rust 1.60.0

 

  •  VS Code 1.67.2 

  项目工程

这里继续沿用上次工程rust-demo

基础概念 

当你编写大型程序时,组织你的代码将是重要的,因为在你的头脑中保持整个程序的轨迹将变得不可能。通过对相关的功能进行分组,并将代码与不同的功能分开,您将清楚在哪里可以找到实现特定功能的代码,以及在哪里可以更改功能的工作方式。 

到目前为止,我们编写的程序都在一个文件的一个模块中。随着项目的增长,您可以通过将代码分成多个模块和多个文件来组织代码。一个包可以包含多个二进制板条箱和一个可选的库板条箱。随着包的增长,您可以将部件提取到独立的板条箱中,成为外部依赖项。本章涵盖了所有这些技术。对于由一组相互关联的包组成的非常大的项目,Cargo提供了工作空间。

除了对功能进行分组之外,封装实现细节还可以让您在更高的层次上重用代码:一旦实现了一个操作,其他代码就可以通过代码的公共接口调用该代码,而无需知道实现是如何工作的。您编写代码的方式定义了哪些部分是公共的供其他代码使用,哪些部分是私有的实现细节,您保留更改这些细节的权利。这是限制你必须记住的细节数量的另一种方法。

一个相关的概念是范围:编写代码的嵌套上下文有一组被定义为“在范围内”的名称在读取、编写和编译代码时,程序员和编译器需要知道特定位置的特定名称是否引用了变量、函数、结构、枚举、模块、常量或其他项,以及该项的含义。您可以创建范围并更改范围内或范围外的名称。在同一范围内不能有两个同名的项目;有解决名称冲突的工具。

Rust有许多特性允许你管理你的代码的组织,包括哪些细节是公开的,哪些细节是私有的,以及在你的程序中的每个作用域中有什么名字。这些功能有时统称为module system,包括:

  • Package(包):一个Cargo功能,让您建立,测试,和共享箱
  • Crates(箱):生成库或可执行文件的模块树
  • Modules(模块)和use:让您控制路径的组织、范围和隐私
  • Paths(路径):一种命名项目的方式,如结构、函数或模块

Package(包) & Crates(箱)

我们将介绍的模块系统的第一部分是Package和Crates。

Package是提供一组功能的一个或多个Crates。一个Package包含一个Cargo.toml文件,该文件描述了如何构建这些Crates。

Crates可以是二进制的Crates或库Crates。二进制Crates是可以编译成可运行的可执行文件的程序,例如命令行程序或服务器。它们必须有一个名为main的函数来定义可执行文件运行时发生的事情。到目前为止,我们创建的所有Crates都是二进制的Crates。

库Crates没有主函数,也不会编译成可执行文件。它们定义了多个项目共享的功能。例如,我们在前面章节中使用的rand crate提供了生成随机数的功能。

crate root是一个源文件,Rust编译器从它开始,并构成了crate的根模块。

几个规则决定了一个package可以包含什么。一个package最多可以包含一个库crate。它可以包含任意数量的二进制crate,但必须至少包含一个crate(库或二进制文件)。 

让我们看一下当我们创建一个package时会发生什么。首先,我们输入命令cargo new:

$ cargo new my-project       // 创建工程
     Created binary (application) `my-project` package
$ ls my-project               // 查看工程
Cargo.toml
src
$ ls my-project/src           // 查看目录
main.rs

当我们输入命令时,cargo创建了一个cargo.toml文件,给了我们一个package。查看cargo.toml的内容,没有提到src/main.rs,因为cargo遵循一个约定,src/main.rs是与package同名的二进制crate的crate根。同样,cargo知道如果包目录包含src/lib.rs,那么package包含一个与package同名的库crate,src/lib.rs是它的crate root。cargo将板条箱根文件传递给rustc来构建库或二进制文件。 

这里,我们有一个只包含src/main.rs的package,这意味着它只包含一个名为my-project的二进制文件。如果一个package包含src/main.rs和src/lib.rs,那么它有两个crate :一个二进制文件和一个库,两者的名称都与package的名称相同。通过将文件放在src/bin目录中,一个package可以有多个二进制crate :每个文件将是一个单独的二进制crate。

本章重点

  • Package(包)的概念
  • Crate(箱)的概念
【Rust模块管理】Rust包、crate与模块管理 包:Cargo的一个功能,允许构建,测试,和分享crate。 crate:一个模块的树形结构,形成库或二进制项目。 模块:通过use来使用,用来控制作用域和路径的私有性。 路径:一个命名 例如结构体、函数或模块等项的方式 在 Rust 中,模块(module)是组织代码的基础单位,它帮助你将代码划分为多个逻辑部分,便于管理、复用和控制访问权限。 模块是一个命名空间,用于组织函数、结构体、枚举、常量、trait 和其他模块。Rust 中的模块可以嵌套,并且支持私有和公开访问控制。 阅读详情

相关推荐

11、Rust 中的包、箱和模块详解

本文详细解析了 Rust 编程语言中的包、箱和模块系统,介绍了如何通过模块组织代码、控制作用域和隐私权限,以及使用路径引用模块中的项目。文章还通过具体示例展示了模块系统的应用场景,并总结了其优势与注意事项,帮助开发者更好地理解和运用 Rust 的模块机制。

a3b4c5的博客 99

Rust——包管理

这篇文章将介绍Rust如何进行包管理。保姆级教程。

JAN6055的博客 3687

【Rust指南】组织管理|路径表示|访问权限

为了方便大家学习掌握Rust 语言的语法和概念,因此我将带来一篇Rust 组织管理的内容。任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。包、箱、模块。对于一个软件工程来说,我们往往按照所使用的编程语言的组织规范来进行组织,组织模块的主要结构往往是树。Java 组织功能模块的主要单位是类,而 JavaScript 组织模块的主要方式是function。这些先进的语言的组织单位可以层层包含,就像文件系统的目录结构一样。Rust 中的组织单位是模块...

叶落秋白的博客 2469

如何理解rust的箱、包、模块之间使用关系?

用一个实际的项目结构来解释 Rust 中箱(Crate)、包(Package)和模块(Module)之间的关系。必须至少包含一个箱(库箱或二进制箱)src/main.rs 定义二进制箱。src/lib.rs 定义库箱。使用 mod 关键字声明模块。使用 pub 关键字公开模块。箱是模块的树形结构的根节点。一个包可以包含多个箱。

优快云 上留心得,愿与诸君共步攀。 409

科研绘图实战:用Adobe Illustrator高效排版期刊论文图片

本文详细介绍了使用Adobe Illustrator高效排版科研论文图片的完整工作流。针对期刊投稿常见的图片格式问题,文章重点讲解了矢量图与位图的预处理、AI中的精准对齐与分布技巧、文字样式统一管理以及最终输出TIFF/PDF等符合出版要求的格式。掌握这套方法能确保图片满足高分辨率、规范字体和精确尺寸等期刊硬性标准,显著提升投稿效率。

tomato的博客 1430

别再手动填序号了!用Python脚本在Arcgis属性表里实现分组自动编号(附完整代码)

本文详细介绍了如何利用Python脚本在Arcgis属性表中实现分组自动编号,告别低效的手工操作。通过核心代码解析和实战教程,帮助GIS工程师快速掌握自动化编号技术,提升工作效率并降低错误率。特别适合城市规划、国土调查等需要处理大量分组数据的场景。

weixin_42532473的博客 308

Rust包管理 Crate

包和crate 通过相关功能进行分组和划分不同的功能代码, 将代码分割成多个模块和多个文件组织代码, 一个包包含 多个crate 和一个可选的crate, Cargo 类似C++ 提供一个工作空间命名 类似JAVA中包空间。 避免重复造轮子, 其他代码通过公关接口进行调用。 模块系统: 包,Crates(模块树形结构,库和二进制项目), 模块, 路径。 *crate 是一个二进制项/ 库, rust编译以crate root源文件为起点,包中包含一个Cargo.toml 描述如何构建crate. $ c

上后谈感情的博客 1072

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

掌握Cargo与Rust包管理:轻松发布与依赖控制

本文介绍了Rust语言的包管理工具Cargo,重点讲解了Cargo.toml配置文件的使用,包括包元数据、依赖管理和发布包的过程。通过实战案例和技巧,我们学会了如何创建Web服务器和使用Cargo的特性标志。最后,强调了Cargo的自动化和易用性,以及它在Rust开发中的重要性。

silenceallat的博客 1608

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

【数学基础】基于欧拉角表达的旋转顺序

欧拉角旋转顺序

FalschxMico 1384

Rust组织管理,箱Crate包Package和模块module定义和区别,use关键字作用

这里有两个 govern 函数,一个是 nation 下的,一个是 government 下的,我们用 as 将 nation 下的取别名 nation_govern。使用过 Java 的开发者在编程时往往非常讨厌最外层的 class 块——它的名字与文件名一模一样,因为它就表示文件容器,尽管它很繁琐但我们不得不写一遍来强调"这个类是文件所包含的类"。Rust 中的组织单位是模块(Module)。所有的系统库模块都是被默认导入的,所以在使用的时候只需要使用 use 关键字简化路径就可以方便的使用了。

1562

Rockchip RK3566 Buildroot SDK构建与内核编译实战指南

嵌入式Linux开发中,交叉编译环境是系统启动的基础支撑。Buildroot作为轻量级嵌入式构建框架,通过配置驱动、自动化下载和分层编译机制,显著降低定制化Linux发行版的集成门槛。其核心价值在于将内核、根文件系统与工具链统一管理,兼顾资源约束下的确定性构建与工程可复现性。典型应用场景涵盖ARM64平台(如RK3566)的固件开发、IoT设备量产镜像生成及硬件Bring-up阶段的快速验证。本文围绕Buildroot SDK全流程实践,深入解析环境搭建、Repo源码同步、离线DL库预置及内核编译等关键环节

weixin_36047538的博客 135

30天拿下Rust之箱、包和模块

Rust语言使用模块系统来组织工程和代码。模块系统允许我们将相关的函数、类型、常量等组织在一起,形成一个逻辑上的单元。通过模块系统,我们可以隐藏实现细节,只暴露必要的接口,从而提高代码的可读性和可维护性。Rust的模块系统还支持路径依赖和重导出等功能,使得代码的组织更加灵活和方便。Rust的模块系统中有三个非常重要的概念,分别是:箱(Crate)、包(Package)和模块(Module),下面逐一进行介绍。

hope_wisdom的技术博客 2123

树莓派 Raspberry Pi 使用 YOLOv8 YOLOv10 YOLOv11进行目标检测及推理加速,Run YOLOv8 YOLOv10 YOLOv11 on Raspberry Pi

libcamera 是 linux 新增加用于访问 camera 的 API。树莓派参与了 libcamera 的开发,并且在新的摄像头软件中开始从依赖于固件的摄像头图像处理管道(Image processing pipeline, ISP)迁移到更加开放的 libcamera。当然这块用USB 摄像头应该也是可以的。

shiter编写程序的艺术 5568

2026年【江苏“信息与未来”编程思维】真题及题解(T6:桌面游戏)

2026年【江苏“信息与未来”编程思维】真题及题解(T6:桌面游戏)

王老师青少年编程 534

趣味学RUST基础篇(管理包和模块)

概念类比作用mod建房间划分代码区域路径门牌号定位某个函数或结构体pub开门按钮决定是否对外开放use快捷方式简化对常用项的调用模块树大楼平面图展示所有模块的层级关系。

编码浪子的专栏 951

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

rust学习之包和模块

对于 Rust 而言,包是一个独立的可编译单元,它编译后会生成一个可执行文件或者一个库。模块可见性不代表模块内部项的可见性,模块的可见性仅仅是允许其它模块去引用它,但是想要引用它内部的项,还得继续将对应的项标记为。使用模块,我们就能将功能相关的代码组织到一起,然后通过一个模块名称来说明这些代码为何被组织在一起。目录下,每一个文件都是独立的二进制包,同时也会包含一个库包,该包只能存在一个。Rust 出于安全的考虑,默认情况下,所有的类型都是私有化的,文件,包根文件中的三个模块分别形成了模块树的剩余部分。

2301_79967122的博客 2452

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

通过包和模块来组织Rust项目

Rust是一种现代的系统编程语言,具有高效性、安全性和并发性等特点。它的构建系统和包管理系统通过Cargo工具提供支持,帮助开发者管理项目、工作空间、包和模块。下面详细介绍Rust中的相关概念及其用法。

yang1fei2的博客 1623

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Rust编程-包、模块、单元包

1. 包可以类比前端工程2. 单元包分为二进制单元包和库单元包。二进制单元包就是开发当前业务系统;库单元包是为了开发组件库(类比npm组件)。1. 模块的作用主要是功能相关的代码分组到一起2. 条目是模块的组成部分,包含变量、结构体、枚举、子节点等3. 路径是访问条目的路径。是条目在模块树的节点的路径。文章引字《Rust权威指南》一书。通过整理让概念和知识点更加条理清晰。本章都是概念知识很简单,但是需要把知识点梳理清楚。

Mercuryyjs的博客 1554

Rust包、crate与模块管理

Rust的包、crate和模块管理机制提供了一种强大而灵活的方式来组织和管理代码。通过Cargo工具,开发者可以轻松地处理依赖关系、编译代码和发布包。理解这些概念对于有效地编写和维护Rust项目至关重要。

owolai的博客 1437

Rust之包,箱和模块管理(五):将模块分成不同的文件

Rust之包,箱和模块管理(五):将模块分成不同的文件

wing的专栏 1723

Rust 组织管理

任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个文件中编写的,主要是为了方便学习 Rust 语言的语法和概念。对于一个工程来讲,组织代码是十分重要的。Rust 中有三个重要的组织概念:箱、包、模块。

m0_65541699的博客 1875

Rust之包,箱和模块管理(四):用use关键字引用其他包

Rust之包,箱和模块管理(四):用use关键字引用其他包

wing的专栏 4045
上一篇: Rust之枚举和模式匹配(三):简明控制流if let
下一篇: Rust之包,箱和模块管理(二):定义控制范围和隐私的模块
枫★曦
博客等级 码龄19年 251粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值