Rust和Golang离线代码迁移
Rust和Golang离线代码迁移
在Rust
和Golang
当中,都采用在线进行进行相关包管理和安装,其中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
之后会有提示):
x[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"
接着在进行编译即可.
Golang
在golang
中(1.16+)使用go.mod
和go.sum
来对第三包进行同步,这时需要将go.mod
中所使用的包都进行离线迁移. 这时可以使用go mod vendor
来在项目根目录在生成vendor
文件夹,里面包含了所使用的包的离线版本. 若有库采用了cgo
方式进行编译,那么go mod vendor
则不会离线相应头文件或其它文件. 这时需要手动对vendor
文件夹下相关库进行替换;若在go.mod
中使用了replace
命令包来进行相关替换,那么在vendor/modules.txt
找到相应库进行手动替换,该文件包含了所引用包和所引用的文件.
在离线相关包之后,编译或运行时添加-mod=vendor
来表明使用本地离线库编译或运行代码.
评论
发表评论