【Rust】使用cargo创建项目及cargo源的替换
---------------------------------参考文档-------------------------------
https://rustlang-cn.org/office/rust/book/getting-started/ch01-03-hello-cargo.html
https://doc.rust-lang.org/cargo/reference/source-replacement.html
https://www.jianshu.com/p/71fb28974cf6
--------------------------------------------------------------------------
cargo介绍
cargo是rust的程序构建和包管理工具,通过在cargo中声明依赖库,可以下载并编译依赖库,同时cargo也可以用于整个项目的生命周期:创建、编译、发布。
cargo在安装rust的时候就已经完成了安装,所以不需要单独安装。
以下将以掷色子游戏为例,来练习使用cargo;掷色子游戏要求输入n,掷出n个色子。
使用cargo创建项目
cargo new playing_dice
cargo就会为我们创建目录结构:一个Cargo.toml文件和src文件夹下的main文件
Cargo.toml中主要是声明当前程序版本信息及依赖库,这里可以查看Cargo.toml的内容,并适当修改。
在main.rs中写入自定义的代码
//引入标准io库
use std::io; fn main() {
println!("请输入次数:");
let mut count=String::new();//定义可变变量 count,let表示定义变量,mut表示该变量时可变的
io::stdin().read_line(&mut count).expect("输入错误!");//读取输入,将其保存到变量count中
println!("你输入的次数为:{}",count);//使用占位符打印 }
这里我们使用了io库,io库来自于标准库 std,通过use 关键字将io库引入到当前作用域。
let关键字表示定义了一个变量,在rust中默认变量是不可变变量,关键字mut表示 该变量是可变的。
使用cargo check检查代码是否有语法错误。
cargo check
如果代码检查通过,执行cargo run执行即可运行程序
下面引入依赖库rand来生成随机数,rand是一个库crate,包含能被其他程序使用的代码。
打开Cargo.toml,在dependencies中维护上引用rand库的信息
引用库信息可以访问https://crates.io查找,这里我们查询rand,使用0.7.0的版本。
修改main.rs,增加生成随机数的逻辑
//引入外部库
use std::io;
use rand::Rng; fn main() {
println!("请输入次数:");
let mut count=String::new();
let mut i=0;
io::stdin().read_line(&mut count).expect("输入错误!");
println!("你输入的次数为:{}",count);
let int_count = count.trim().parse().expect("请输入数字!"); while i<int_count {
let rand_number=rand::thread_rng().gen_range(1,6);
println!("{}",rand_number);
i=i+1;}
}
再次运行cargo check检查是否有语法错误,因为我们引用了rand 的crates,所以cargo会下载rand的库文件及依赖库并编译(图是后续补的,所以显示是0.6.5版本,正常应该显示的是0.7.0)
检查通过,运行cargo run 查看效果。
更换cargo的源
程序中引用crates,编译时需要从官方仓库中下载crates文件,但是使用官方的源有的时候很慢并且不稳定,所以使用时需要替换为国内镜像地址,目前常用的是中科大的源。
步骤:修改$HOME/.cargo/config文件内容,如果没有这个文件的话直接手工创建。
贴上如下内容
[source.crates-io]
replace-with = 'ustc' [source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
【Rust】使用cargo创建项目及cargo源的替换的更多相关文章
- Rust <0>:源代码组织,Cargo 入门
Rust 源代码组织,使用配套的 Cargo 工具,其功能强大,程序员可摆脱 C/C++ 中需要自行维护 make.cmake 之类配置的工作量. 初始化一个项目: cargo new --bin h ...
- Maven自定义绑定插件目标:创建项目的源码jar
<build> <plugins> <!-- 自定义绑定,创建项目的源码jar --> <plugin> <groupId>org.apac ...
- vs创建项目模板和项模板
原文地址:https://msdn.microsoft.com/zhcn/library/xkh1wxd8(v=vs.140).aspx 如何:创建项目模板 Visual Studio 2015 ...
- Maven入门学习,安装及创建项目
一.maven介绍: 1.maven是一个基于项目对象模型(POM Project Object Model),通过配置文件管理项目的工具(项目管理工具). 2.maven主要功能:发布项目(从编译到 ...
- (转)Ratchet教程:创建项目
原文:http://www.w3cplus.com/mobile/how-to-create-mobile-project-width-ratchet.html Ratchet教程:创建项目 ...
- 第二章 andrid studio创建项目
原文 http://blog.csdn.net/zhanghefu/article/details/9326735 第二章 andrid studio创建项目 第二章 andrid studio创建项 ...
- node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能
第一章 建议学习时间8小时·分两次学习 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章]) 视频教程地 ...
- Vuejs实例-使用vue-cli创建项目
1,首先从官方网站下载安装Node.js,建议使用6.x版本,同时也会一并安装npm工具,npm>3.10以上. 2,npm安装很慢(国外服务器),所以一般推荐使用npm淘宝镜像cnpm,先安装 ...
- 【从零开始搭建自己的.NET Core Api框架】(一)创建项目并集成swagger:1.1 创建
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
随机推荐
- 【CF55D】Beautiful numbers
[CF55D]Beautiful numbers 题面 洛谷 题解 考虑到如果一个数整除所有数那么可以整除他们的\(lcm\),而如果数\(x\)满足\(x\bmod Lcm(1,2...,9)=r\ ...
- npx 使用教程
转自阮一峰http://www.ruanyifeng.com/blog/2019/02/npx.html npm 从5.2版开始,增加了 npx 命令.它有很多用处,本文介绍该命令的主要使用场景. N ...
- 必会的 55 个 Java 性能优化细节!一网打尽!
阅读本文大概需要 10 分钟. 来源:https://yq.aliyun.com/articles/662001 在 Java 程序中,性能问题的大部分原因并不在于 Java 语言,而是程序本身.养成 ...
- Java编程思想之二 一切都是对象
2.1 用引用操作对象 每种编程语言都有自己的操作内存中元素的方式. 在Java中,一切都可以视为对象,因此可以采用单一的固定语法. 2.2 必须由你创建所有对象 一旦创建一个引用,就希望它能与一个新 ...
- WordPress入门 之 设置导航菜单
WordPress 3.0 添加了一个自定义导航菜单的功能,让你可以很自由地设置网站的导航菜单.现在大多数的主题也都支持这个功能了,那么,究竟该如何设置WordPress导航菜单?今天倡萌就介绍一下. ...
- Kibana自动关联ES索引
原因: Kibana中关联ES索引需要手动操作,如果ES中索引较多(如每天生成),则工作量会比较大. 方法: 考虑使用Linux的cron定时器自动关联ES索引,原理是调用Kibana API接口自动 ...
- Element + Vue I18n动态import加载国际化语言包翻译文件
需求 项目为多页应用,包含产品a.b.c.d.e,每个产品都有自己的翻译文件.一次加载所有翻译文件是极度不合理的.于是考虑动态加载. 实现 参考官方文档:延迟加载翻译 项目结构 │ ├── dist ...
- border-radius实例2
一.border-radius 最大值100% /* border-radius的最大值是100% */ .block { width: 100px; height: 100px; border: 1 ...
- cesium地形瓦片(Quantized-mesh)格式
目录 1.切片规则 2.瓦片格式分析 2.1.数据头部 2.顶点数据 2.3.索引数据 2.4.扩展数据 参考资料: quantized-mesh-1.0 terrain format(用于三维可视化 ...
- 【JavaScript】JavaScript中的ActiveXObject对象
JavaScript中ActiveXObject对象是启用并返回 Automation 对象的引用. 使用方法: newObj = new ActiveXObject( servername.t ...