rust关于项目结构包,Crate和mod和目录的组织

这篇具有很好参考价值的文章主要介绍了rust关于项目结构包,Crate和mod和目录的组织。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

rust

最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下

rust关于包,Crate

关于包,Crate这块先看看官方书籍怎么说的

crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件(第一章我们这么做过),编译器还是会将那个文件认作一个 crate。crate 可以包含模块,模块可以定义在其他文件,然后和 crate 一起编译,我们会在接下来的章节中遇到。
crate 有两种形式:二进制项和库。二进制项 可以被编译为可执行程序,比如一个命令行程序或者一个服务器。它们必须有一个 main 函数来定义当程序被执行的时候所需要做的事情。目前我们所创建的 crate 都是二进制项。
库 并没有 main 函数,它们也不会编译为可执行程序,它们提供一些诸如函数之类的东西,使其他项目也能使用这些东西。比如 第二章 的 rand crate 就提供了生成随机数的东西。大多数时间 Rustaceans 说的 crate 指的都是库,这与其他编程语言中 library 概念一致。
crate root 是一个源文件,Rust 编译器以它为起始点,并构成你的 crate 的根模块(我们将在 “定义模块来控制作用域与私有性” 一节深入解读)。
包(package)是提供一系列功能的一个或者多个 crate。一个包会包含一个 Cargo.toml 文件,阐述如何去构建这些 crate。Cargo 就是一个包含构建你代码的二进制项的包。Cargo 也包含这些二进制项所依赖的库。其他项目也能用 Cargo 库来实现与 Cargo 命令行程序一样的逻辑。包中可以包含至多一个库 crate(library crate)。包中可以包含任意多个二进制 crate(binary crate),但是必须至少包含一个 crate(无论是库的还是二进制的)

这里我个人理解包类似于java当中maven当中的模块,crate root 是一个源文件,Rust 编译器以它为起始点,并构成你的 crate 的根模块。就是说各个mod串联的起点,比如main.rs当中定义。或者lib.rs库create

mod

先看看官方教程

这里我们提供一个简单的参考,用来解释模块、路径、use关键词和pub关键词如何在编译器中工作,以及大部分开发者如何组织他们的代码。我们将在本章节中举例说明每条规则,不过这是一个解释模块工作方式的良好参考。
从 crate 根节点开始: 当编译一个 crate, 编译器首先在 crate 根文件(通常,对于一个库 crate 而言是src/lib.rs,对于一个二进制 crate 而言是src/main.rs)中寻找需要被编译的代码。
声明模块: 在 crate 根文件中,你可以声明一个新模块;比如,你用mod garden声明了一个叫做garden的模块。编译器会在下列路径中寻找模块代码:
内联,在大括号中,当mod garden后方不是一个分号而是一个大括号 ,在文件 src/garden.rs,在文件 src/garden/mod.rs
声明子模块: 在除了 crate 根节点以外的其他文件中,你可以定义子模块。比如,你可能在src/garden.rs中定义了mod vegetables;。编译器会在以父模块命名的目录中寻找子模块代码:内联,在大括号中,当mod vegetables后方不是一个分号而是一个大括号
在文件 src/garden/vegetables.rs
在文件 src/garden/vegetables/mod.rs
模块中的代码路径: 一旦一个模块是你 crate 的一部分,你可以在隐私规则允许的前提下,从同一个 crate 内的任意地方,通过代码路径引用该模块的代码。举例而言,一个 garden vegetables 模块下的Asparagus类型可以在crate::garden::vegetables::Asparagus被找到。
私有 vs 公用: 一个模块里的代码默认对其父模块私有。为了使一个模块公用,应当在声明时使用pub mod替代mod。为了使一个公用模块内部的成员公用,应当在声明前使用pub。
use 关键字: 在一个作用域内,use关键字创建了一个成员的快捷方式,用来减少长路径的重复。在任何可以引用crate::garden::vegetables::Asparagus的作用域,你可以通过 use crate::garden::vegetables::Asparagus;创建一个快捷方式,然后你就可以在作用域中只写Asparagus来使用该类型。

这里我个人理解就像是java当中的package,当然也有很大区别。通过这些能组织项目中的目录,各个package引用

举个例子,用mvc层架构controller包举例

想创建controller目录,首先再main.rs或者lib.rs当中声明mod,这里用main.rs举例

pub mod controller;

fn main() {
    println!("hello world!");
}

然后就可以创建controller目录了,并创建对应的mod.js
rust关于项目结构包,Crate和mod和目录的组织,rust语言,rust,开发语言,后端,cargo
下面再controller目录下创建别的rs文件可以这么做,比如创建user模块的。
在controller/mod.rs当中声明user mod

pub mod user;

然后就可以在controller目录下创建user.rs mod了
最终下来简单结构如图
rust关于项目结构包,Crate和mod和目录的组织,rust语言,rust,开发语言,后端,cargo
后续可以按照此方法创建单package下的代码结构了。
文章算是记录遇到的问题。如有不对的地方欢迎指正文章来源地址https://www.toymoban.com/news/detail-638306.html

到了这里,关于rust关于项目结构包,Crate和mod和目录的组织的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 各类Python项目的项目结构及代码组织最佳实践

    1. 了解Python项目文件组织结构非常重要 为什么要掌握python项目结构? 优秀的程序员都使用规范的项目代码结构,了解这些好的习惯方式,有助于快速读懂代码 如果项目是几个人合作开发,好的代码结构,便于分工,减少混乱,使项目开发过程更顺畅。 采用规范的项目结构,

    2023年04月16日
    浏览(92)
  • rust crate.io 配置国内源(cargo 国内源) warning: spurious network error (2 tries remainin...

    rust 笔记 Crate 国内源配置 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/130758057 Rust 官方默认的 Cargo 源服务器为 crates.io,其同时也是 Rust 官方的 crate 管理仓库,但是由于官方服

    2024年02月05日
    浏览(43)
  • 关于AttributeError: module ‘cv2.legacy‘ has no attribute ‘TrackerCSRT_crate‘的报错处理

    关于AttributeError: module \\\'cv2.legacy\\\' has no attribute \\\'TrackerCSRT_crate\\\'的报错 当我第一次运行多目标追踪的时候,编译器给出了这样的一个报错,导致代码无法运行 查看报错之后我发现是OpenCV的问题,直接就打开查看版本以及问题  两个包以及版本其实并没有什么问题,但是一直出现

    2024年02月05日
    浏览(44)
  • python项目结构示例(python代码结构、python目录结构)与python部署结构、python部署目录、flask项目结构、flask目录

    myproject/ :项目的根目录,也是Python包的根目录。 myproject/__init__.py :一个空的 __init__.py 文件,用于将 myproject 目录标记为一个Python包。 myproject/module1.py 、 myproject/module2.py 等:项目的模块文件,包含项目的核心代码。 tests/ :测试目录,包含用于测试项目代码的测试文件。

    2024年02月12日
    浏览(57)
  • Rust :mod.rs和lib.rs中use的作用

    一、mod.rs和lib.rs mod.rs往往是把同一目录下的n个rs文件综合在一起的有效方式; lib.rs是一个库或子库层次综合在一起的有效方式; 下面举个实例来说明。生成一个rusttoc本地库(由cargo new rusttoc --lib所生成),目录结构如下: 其中,data.rs文件内容如下: 其中,ffi.rs文件内容如

    2024年02月07日
    浏览(35)
  • Rust 语言中的结构体

    目录 1、结构体 2、结构体的定义和实例化 2.1 使用字段初始化简写语法 2.2 使用结构体更新语法从其他实例创建实例 2.3 没有命名字段的元组结构体 2.4 没有任何字段的类单元结构体 2.5 结构体示例程序 3、方法 3.1 关联函数 3.2 多个 impl 块 struct ,或者  structure ,是一个自定义

    2024年02月05日
    浏览(30)
  • 关于a^b%mod

    当b非常大时,我们不能够直接对b取模,即a^(b%mod)!=a^b%mod,可以利用欧拉定理  参考博客:HDU-4549(矩阵快速幂+欧拉定理)_薄层的博客-CSDN博客

    2024年02月15日
    浏览(47)
  • 【Java工程目录结构】项目结构和模块结构

    结构划分有利于管理文件。 代码要放在 源文件文件夹(src/main/java)下才能正确编译和执行。 一个项目project,包含任意个模块module。一个模块包含任意个包package。 包是类的容器,用于分隔类名空间。 包的名字有层次关系,各层之间以点分隔:顶级域名.公司域名. 项目名.

    2024年01月21日
    浏览(51)
  • 【Microsoft Edge】关于 Microsoft Edge 浏览器多版本安装目录结构的测试分析

    最近(2023年4月12日 ~ 2023年4月13日) 笔者重装了 Win10 系统,选择的 Windows 10 企业版 2021 LTSC 版本镜像,安装后发现自带的 Edge 浏览器版本过低,且可执行程序的原始文件名是 miedge ,而非之前使用的 msedge 。第一次打开时默认还打开了hao123,且主页设置了一个 baidu 的插件,所

    2024年02月09日
    浏览(86)
  • vue项目结构目录介绍

    build 文件夹 及 子目录 这里面是一些webpack的配置,主要用于项目打包时的一些设置。这里不去更详细的深入,相关的文件及配置会在后面用到时在详细的介绍。 config 文件 及 子目录 这个文件夹里装的是整个项目 开发运行时的一些配置,比如npm run dev 时 项目的启动端口 之类

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包