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 回复

对于类似问题,请参考 Go: unknown subcommand “mod” 解决方案。

谢谢

Christophe

更多关于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 version”命令时运行的是哪个Go二进制文件。使用“which go”命令来查看。它会返回所执行的go二进制文件的路径。

你可能通过apt包管理器安装了Go。如果是这样,你应该使用“sudo apt-get remove go”命令来卸载它。除非你是通过snap安装的Go。

// 代码示例:检查Go版本
package main

import (
    "fmt"
    "os/exec"
)

func main() {
    out, err := exec.Command("go", "version").Output()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(out))
}

这是一个典型的Go版本管理问题。从你的输出可以看到系统中同时存在两个Go版本:

  1. go1.13.3 - 新安装的标准Go版本
  2. 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)
}

执行这些步骤后,你的构建版本差异问题应该得到解决。

回到顶部