使用Cargo工具高效创建Rust项目


Posted in Javascript onAugust 14, 2022

前言

本文紧跟上篇Rust博文内容,讲解Cargo工具在Rust项目创建时的妙用,手把手教你使用Cargo工具在黑窗口创建项目。此外,创建项目之后,简单的做一个Rust语言中输入输出的测试,上文提到学好Rust语言的方法就是一步一步打基础,因此仍要潜心修炼,打牢基础。

一、功能强大的Cargo工具

1、Cargo工具是什么?

  • Cargo是Rust 的构建系统和包管理工具,主要功能包括:
    • 创建和管理 Rust 的模块系统
    • 下载和管理依赖库
    • 调用rustc或其他构建工具来构建项目
  • 安装Rust 的时候会自动安装Cargo
    • 验证的命令:cargo --version

2、使用Cargo命令创建 hello_cargo 项目

命令:cargo new hello_cargo

使用Cargo工具高效创建Rust项目

其中code .是VSC工具的命令,意思是使用他来打开项目文件:

使用Cargo工具高效创建Rust项目

可以看到Cargo工具为我们生成了其他的文件,具体看一下都是什么作用:

自动创建了一个新目录hello_cargo,包含:

  • Cargo.toml
  • src目录
    • main.rs
  • 初始化了一个新的Git仓库:.gitignore
    • 可以使用其他的vcs(版本控制系统)
    • 或者不适用vcs:cargo new 项目名 --vcs

3、项目文件目录里各文件的内容和特点

  • Cargo.toml
  • TOML(Tom’s Obvious,Minimal Language)格式,存放Cargo的配置

使用Cargo工具高效创建Rust项目

  • [package],是一个区域标题,表示下方内容是用来配置包的(package)
  • name:项目名
  • version:项目版本
  • edition:使用的Rust版本
  • [dependencies]
  • 另一个区域的开始,它会列出项目的依赖项。
  • 在Rust里,代码的包写做:crate

2.src/main.rs

  • cargo生成的 main.rs 在src目录下,此外源代码都应该放在src目录下
  • 而cargo.toml在项目顶层下
  • 顶层目录可以放置:RENAME、许可信息、配置文件等
  • 将非cargo创建的项目转化为cargo的方法:
  • 把源代码移动到src里面
  • 创建cargo.toml并填写相应的配置

3.Cargo.lock

  • 第一次执行Cargo build命令会在顶层目录生成 cargo.lock文件
  • 该文件负责追踪项目依赖的精确版本
  • 不需要手动修改此文件

4、Cargo 常用命令

  • cargo build
  • 创建可执行文件:target\debug\hello_cargo.exe
  • cargo run
  • 构建和运行cargo项目,编译代码+执行结果
  • 如果之前编译过且源码没有发生改变,则会直接运行二进制文件
  • cargo check
  • 检查代码,确保能够通过编译,但是不产生任何可执行文件
  • cargo check 要比 cargo build 快得多
  • 编写代码得时候可以周期性得使用cargo check命令检查代码,提高效率
  • cargo build --release
  • 一共两种配置:
  • 开发使用 :cargo build
  • 正式发布: cargo build --release
  • 为发布构建,编译时会进行优化
  • 代码运行速度会更快,但是编译时间长
  • 会在target/release 目录下生成可执行文件,而不是 target/debug

二、Rust 语言的输入输出

1、输入输出测试

源码:

use std::io;
fn main() {
    println!("测试输入输出功能");
    println!("从键盘输入一个数字:");

    let mut a=String::new();

    io::stdin().read_line(&mut a).expect("无法读取行");
    
    println!("输出结果为:{}",a);
}

运行效果:

使用Cargo工具高效创建Rust项目

2、具体代码解析

接下来把不熟悉的代码依次解释:

let mut a=String::new();
 

let用来声明变量,mut代表该变量值可修改,String::new()意思是调用String类的实例。

  • 在Rust 中默认变量不可修改,加上mut 才可以被修改
  • new 在Rust 中常用来创建类型实例
  • 这句话的意思就是将一个空白的字符串绑定到可变的字符串变量a上
use std::io;
io::stdin().read_line(&mut a).expect("无法读取行");

use用来引入库,std::io在Rust 中代表标准的输入输出,整体可理解为c中的#include<stdio.h>
在io库调用stdin()类里的read_line()方法,而该方法需要传入可变字符串,因此将 &mut a传入,
为什么要加地址符&呢,这里啊用到了C++里的引用,这样参数列表里字符串的变化会修饰实参a的变化,且不会产生副本,安全高效。最后还有一个ecpect()方法,read_line()方法会返回一个Result枚举类型,含有Ok 和 Err 两个变体。

  • 如果Result返回的是Err,那么expect()方法就会中断整行代码并打印expect里的信息。
  • 如果返回的是OK,那么就会把read_line()方法中得到的值赋给OK一并返回给用户。
println!("输出结果为:{}",a);

类似于c 里的 printf("输出结果为%d",a);上面的{}是一个占位符,输出的时候会被后面变量的值取代,有几个{}后面就有多少变量。

到此这篇关于使用Cargo工具高效创建Rust项目的文章就介绍到这了,更多相关Rust输入输出语句内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
基于jquery打造的百分比动态色彩条插件
Sep 19 Javascript
javascript采用数组实现tab菜单切换效果
Dec 12 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
Dec 12 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
Jan 02 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
Jul 21 Javascript
适用于手机端的jQuery图片滑块动画
Dec 09 Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
Vue操作Storage本地化存储
Apr 29 Vue.js
JS实现刷新网页后之前浏览位置保持不变示例详解
Aug 14 #Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 #Vue.js
Vue深入理解插槽slot的使用
Aug 05 #Vue.js
React如何使用axios请求数据并把数据渲染到组件
Aug 05 #Javascript
使用JS前端技术实现静态图片局部流动效果
Aug 05 #Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 #Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 #Javascript
You might like
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python将unicode转为str的方法
2017/06/21 Python
django中的setting最佳配置小结
2017/11/21 Python
python调用摄像头显示图像的实例
2018/08/03 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
白银帝国观后感
2015/06/17 职场文书
节约用水广告语60条
2019/11/14 职场文书