Rust和Golang离线代码迁移

Rust和Golang离线代码迁移

Rust和Golang离线代码迁移

RustGolang当中,都采用在线进行进行相关包管理和安装,其中Rust提供了Cargo工具,而Golang则有go mod相关指令提供包同步服务. 最近由于要将代码放到到服务器上面来保证实验稳定性,但是代码使用的第三方库则是采用在线进行管理,而服务器上面连接在局域网当中,因此需要进行将相关库代码离线迁移到服务器上面.

Rust

在较新Rust版本(1.37+)中,可以直接使用cargo vendor命令在项目根目录下生成一个vendor文件夹,里面包含了当前使用第三方库的所有离线版,其内容跟其远程仓库一样. 同时对于每个库对应根目录下会生成一个.cargo-checksum.json文件,里面包括了该项目中每个文件相关的校验和,如果有缺失值不匹配,则会造成Rust编译代码不通过. 这里有一个值得注意的点,在编译Rust代码时,会生成Cargo.lock文件,若在.gitignore中添加了Cargo.lock那么在采用git进行同步时,可能会造成有些第三库Cargo.lock缺失,这时需要添加对应文件,或者在对应.cargo-checksum.json文件中删除对应校验和选项.

在运行cargo vendor命令之后,在项目根目录下文件.cargo/config.toml(如果没有则创建相关文件夹和文件)添加如下内容(运行cargo vendor之后会有提示):

接着在进行编译即可.

Golang

golang中(1.16+)使用go.modgo.sum来对第三包进行同步,这时需要将go.mod中所使用的包都进行离线迁移. 这时可以使用go mod vendor来在项目根目录在生成vendor文件夹,里面包含了所使用的包的离线版本. 若有库采用了cgo方式进行编译,那么go mod vendor则不会离线相应头文件或其它文件. 这时需要手动对vendor文件夹下相关库进行替换;若在go.mod中使用了replace命令包来进行相关替换,那么在vendor/modules.txt找到相应库进行手动替换,该文件包含了所引用包和所引用的文件.

在离线相关包之后,编译或运行时添加-mod=vendor来表明使用本地离线库编译或运行代码.

评论

此博客中的热门博文

使用Matplotlib创建动图

Fiat-Shamir启发式签名