Golang构建版本差异解析
Golang构建版本差异解析 在WSL2上构建后,出现了以下SemVer差异…
有人能提供建议吗?
查看时间线:
API检查
Go版本为"go1.13.3",忽略 -next /usr/local/go/goroot/api/next.txt
所有测试通过
已在/usr/local/go/goroot中安装适用于linux/amd64的Go 已在/usr/local/go/goroot/bin中安装命令 *** 您需要将/usr/local/go/goroot/bin添加到PATH中。
export PATH=$PATH:/usr/local/go/goroot/bin
go version
go version go1.10.3 gccgo (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0 linux/amd64
更多关于Golang构建版本差异解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
更多关于Golang构建版本差异解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

mmaedel@delle:~/go$ go version
go version go1.13.3 linux/amd64
成功了!
旧版本在 /bin 目录下,而且我忘了在 .profile 文件中设置新 bin 目录的路径。
WSL(Windows Subsystem for Linux)的情况有点让人困惑,但多亏了您快速的帮助,现在弄清楚了。
再次感谢您。
此致
Matthias
这是一个典型的Go版本管理问题。从你的输出可以看到系统中同时存在两个Go版本:
- go1.13.3 - 新安装的标准Go版本
- go1.10.3 gccgo - Ubuntu系统自带的gccgo版本
问题在于PATH环境变量中gccgo的路径优先级更高。以下是解决方案:
// 首先确认当前使用的Go版本
package main
import (
"fmt"
"os/exec"
)
func main() {
// 检查当前go命令路径
cmd := exec.Command("which", "go")
output, _ := cmd.Output()
fmt.Printf("Go命令路径: %s", output)
// 检查版本
cmd = exec.Command("go", "version")
output, _ = cmd.Output()
fmt.Printf("当前版本: %s", output)
}
永久解决方案是修改shell配置文件:
# 编辑 ~/.bashrc 或 ~/.zshrc
echo 'export PATH=/usr/local/go/goroot/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 验证
which go
# 应该输出: /usr/local/go/goroot/bin/go
go version
# 应该输出: go version go1.13.3 linux/amd64
如果你需要临时使用特定版本:
# 临时使用go1.13.3
alias go113='/usr/local/go/goroot/bin/go'
# 或者创建符号链接
sudo ln -sf /usr/local/go/goroot/bin/go /usr/local/bin/go
检查版本冲突的完整诊断:
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
// 检查所有可能的go路径
cmd := exec.Command("bash", "-c", "type -a go")
output, _ := cmd.Output()
paths := strings.Split(strings.TrimSpace(string(output)), "\n")
fmt.Println("系统中找到的Go命令路径:")
for _, path := range paths {
if strings.Contains(path, "go is") {
fmt.Println(path)
}
}
// 检查实际使用的版本
cmd = exec.Command("go", "env", "GOROOT")
goroot, _ := cmd.Output()
fmt.Printf("\n当前GOROOT: %s", goroot)
}
执行这些步骤后,你的构建版本差异问题应该得到解决。


