Go语言版本控制中常见的失误

发表时间: 2024-05-14 09:43

1 go get 常见的错误

> # go versiongo version go1.16.6 linux/amd64> # go get github.com/micro/micro/v3package github.com/micro/micro/v3: cannot download, /root/go is a GOROOT, not a GOPATH. For more details see: 'go help gopath'

这里需要在一个初始化的项目下载

> # mkdir rpc && cd rpc> # go mod init rpc> # go get github.com/micro/micro/v32 go run main.gopackage xxx is not in GOROOT (/usr/lib/go/src/xxx)main.go:5:2: package embed is not in GOROOT (/usr/local/go/src/embed) "061244008229.ctinets.c" 11:18 11-Nov-21app/router/router.go:6:2: package io/fs is not in GOROOT (/usr/local/go/src/io/fs)

embed 和 io/fs 是 Go 1.16 新增的包, golang 版本过低造成的

3 go mod tidy 报错:XXXX found, but does not contain package XXXX

> # go mod tidygitee.com/atix/utils/logger: module gitee.com/atix/utils@latest found (v0.1.0), but does not contain package gitee.com/atix/utils/logger


由于我们 import 导入时未指定特定版本号, 故 golang 默认使用最新版本(即能够通过 git checkout 将其检出的版本号)。

我们去查看该 module, 发现有一个 tag 号为:v0.19.1, 检查该 tag 代码发现确实没有我们要用的 logger 包,

由此判断是我们 import 了一个尚未发布的 package, 碰到这种情况只需要将该 module 重新打个 tag, 将我们用到的 package 发布,

然后本地执行:go get github.com/atix/utils@v0.1.1 把新的版本下载、安装到本地, 之后就正常了。

> # go get github.com/atix/utils@v0.1.1