博文

目前显示的是 十二月, 2021的博文

Rust和Golang离线代码迁移

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