Rust 基础: 三方库依赖 & 自定义三方库

2023-05-16

Rust 基础: 三方库依赖 & 自定义三方库

文章目录

  • Rust 基础: 三方库依赖 & 自定义三方库
  • 正文
    • 1. 项目类型
    • 2. 引入官方三方库
    • 3. 自定义三方库
      • 3.1 创建库项目
      • 3.2 加点内容
      • 3.3 引入自定义三方库
  • 其他资源
    • 参考连接
    • 完整代码示例

正文

今天来介绍一下如何在 rust 项目中依赖三方库,以及如何自定义一个三方库

1. 项目类型

在 Rust 中存在两种基础的项目类型

  • 一种属于应用(application),主入口默认采用 src/main.rs
  • 第二种为三方库(library),主入口为 src/lib.rs

了解两者的区别之后我们就可以来看看如何在项目中引入三方库

2. 引入官方三方库

  • rust 三方库 crates.io

我们知道 rust 项目主要使用 cargo 同时作为依赖管理和打包工具,因此我们只需要在 Cargo.toml 配置文件内标明依赖项目和版本号即可

  • /app/Cargo.toml
[dependencies]
rand = "0.8.0"

接下来就可以在项目内来使用,使用 extern crate 关键字来引入三方库

  • /app/src/main.rs
extern crate rand;

fn main() {
    println!("Hello, world!");
    let x: i32 = rand::random();
    println!("random x = {}", x);
}
  • 输出
Hello, world!
random x = -700735415

3. 自定义三方库

而写一个自定义三方库也很简单,就是创建一个 library 项目就可以了!

3.1 创建库项目

$ cargo new lib --lib

3.2 加点内容

  • /lib/src/lib.rs

注意三方库的主入口为 lib.rs

pub fn test_fn() {
    println!("invoke test_fn from lib");
}

pub fn add(x: i32, y: i32) -> i32 {
    x + y
}

3.3 引入自定义三方库

这时候我们就可以放着,回到 app 项目加入依赖

  • /app/Cargo.toml
[dependencies]
lib = { path = "../lib" }

然后就可以在项目里面使用了

  • /app/src/main.rs
extern crate lib;

fn main() {
    lib::test_fn();
    println!("1 + 2 = {}", lib::add(1, 2));
}
  • 输出
invoke test_fn from lib
1 + 2 = 3

其他资源

参考连接

TitleLink
Dependencies - Rust by Examplehttps://doc.rust-lang.org/rust-by-example/cargo/deps.html
Creating a New Package - The Cargo Bookhttps://doc.rust-lang.org/cargo/guide/creating-a-new-project.html
Random values - The Rust Rand Bookhttps://rust-random.github.io/book/guide-values.html
Rust使用国内镜像安装依赖https://www.cnblogs.com/YMaster/p/13232965.html

完整代码示例

https://github.com/superfreeeee/Blog-code/tree/main/back_end/rust/rust_dependency_library

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 基础: 三方库依赖 & 自定义三方库 的相关文章

  • 相同代码的货物构建:虚假的编译时错误?

    我有板条箱A取决于B and B取决于rust nmea https github com Dushistov rust nmea crate 如果我建造箱子A我遇到了很多错误 所有错误都错过了 use std error Error 在构
  • “流不包含有效的 UTF-8”是什么意思?

    我正在创建一个简单的 HTTP 服务器 我需要读取请求的图像并将其发送到浏览器 我正在使用这段代码 fn read file mut file name String gt String file name file name replac
  • 如何惯用地复制切片?

    在 Go 中 复制切片是标准操作 如下所示 It will figure out the details to match slice sizes dst copy dst n src m 在 Rust 中 我找不到类似的替换方法 我想出的
  • 如何迭代每隔一个数字

    阅读文档时 我注意到一句话 Rust 没有C stylefor 循环 所以 我想知道 如何制作一个相当于for i 0 i lt 10 i 2 我能想到的方法是这样的 for i in 0 10 if i 2 0 Do stuff Or e
  • 货运公司如何决定是否重建部门?

    我正在考虑跳过货物中的依赖关系构建步骤 我有一个简单的项目 使用 3 个板条箱作为依赖项 在Cargo toml 我使用一次构建项目cargo build release 现在我有另一个项目 它使用其中提到的相同依赖项Cargo toml文
  • 对于实现相同特征的结构,如何克服类型不兼容的匹配臂?

    我正在尝试写cat命令来学习 Rust 但我似乎无法将命令行参数转换为阅读器结构 use std env io use std fs File fn main for arg in env args skip 1 let reader ma
  • 为什么使用非文字模式时无法访问此匹配模式?

    以下代码 let max column 7 edge match current column 0 gt Edge Left max column gt Edge Right gt Edge NotAnEdge 结果出现以下警告 warni
  • 是否存在具有单个强所有者和多个弱引用的共享指针?

    我正在寻找类似于的智能指针Arc Rc只不过它不允许共享所有权 我想要尽可能多的rc Weak我需要的参考资料 但我只想one强引用 又称所有者 我想通过类型系统来强制执行这一点 Arc Rc可以克隆 并且可以在多个地方拥有它们 滚动我自己
  • 预期关闭,发现不同的关闭

    A是一个包含向量的结构B A实施add b方法添加了一个B实例到列表B B包含一个闭包属性f 如果我添加一个B到向量add b 没关系 如果我将两个向量相加add b 我收到一个错误 说两个闭包不同 这是一个最小的例子 A struct s
  • 如何创建静态字符串数组?

    Note这个问题包含 Rust 1 0 之前的语法 代码无效 但概念仍然相关 如何在 Rust 中创建全局静态字符串数组 对于整数 编译如下 static ONE u8 1 static TWO u8 2 static ONETWO sta
  • 无约束类型参数错误

    我正在尝试将 glium 与 cgmath 连接起来 下列的这个答案 https stackoverflow com a 40028032 5397009 我已经实现了ToArray要转换实例的特征cgmath Matrix4转换成 gli
  • 如何获取 VESA BIOS 信息

    我正在跟踪Phil Opp 教程 https os phil opp com 关于用 Rust 编写一个操作系统 在稍微尝试了一下之后 我想在屏幕上显示真实的图形 我发现我应该从使用带有 VESA 的线性帧缓冲区开始 我在 osdev or
  • 将实现拆分到多个文件/模块,并尽可能保持所有内容的私密性

    考虑我的库中的以下代码 pub struct Foo impl Foo fn helper self pub fn do something foo Foo foo helper 我的图书馆的用户应该能够使用Foo and do somet
  • 是否可以在纯 Rust 宏中编写像“print!”这样复杂的东西?

    我开始学习 Rust 宏 但文档有些有限 这很好 我想它们是一个专家功能 虽然我可以进行基本的代码生成 特征的实现等 但一些内置宏似乎远远超出了这些 例如各种打印宏 它们检查字符串文字并将其用于代码扩展 我在看的来源print https
  • Rust 中函数调用中的临时对象何时被删除?

    Rust 中函数调用内临时对象的作用域规则是什么 我真正感兴趣的是以下操作是否安全 fn foo gt CString fn bar arg const libc c char bar foo as ptr 我创建了最小的示例 它按照我想要
  • 带填充零的十六进制格式

    将整数类型格式化为十六进制字符串时 我无法让它用零填充数字 println 4x 0x0001 as u16 gt 0x1 but expected 0x0001 println 02x 0x0001 as u16 gt 0x1 same
  • 实现特征时“预期类型参数,找到结构”

    我正在尝试为有向图结构创建一个特征并提供一个非常基本的实现 但遇到编译器错误 pub trait DiGraph lt a gt type N fn nodes
  • 扭曲和响应类型以及特征对象?

    我有一个扭曲拒绝处理程序 我像这样使用它 recover handle rejection 它是这样声明的 pub async fn handle rejection err Rejection gt Result
  • Rust 中为什么有 mod 关键字?

    看完之后this https doc rust lang org book crates and modules html 我想知道为什么有一个mod关键字和mod rs 我假设目录层次结构也可以描述模块 必须显式声明模块有几个原因 模块可
  • 如何在 HashSet 或 HashMap 中使用自定义哈希函数?

    由于 SipHasher 对于我的用例来说太慢 因此我尝试实现自定义哈希函数 我发现一个例子 https github com rust lang rust blob master src librustc util nodemap rs我

随机推荐