Golang安装出现问题...有什么解决办法?

Golang安装出现问题…有什么解决办法? 当我运行 go install 时,它会在以下位置创建应用程序:/c/Users/backend/Documents/goworkspace/bin/test.exe

当我在 GitBash 中输入 test 时,没有任何反应……

所以我执行了 echo $PATH,得到的结果是:

/c/Users/backend/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/backend/bin:/c/Python39/Scripts:/c/Python39:/c/Python38/Scripts:/c/Python38:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/System32/WindowsPowerShell/v1.0:/c/WINDOWS/System32/OpenSSH:/c/Program Files/Java/jdk-13.0.2/bin:/c/Program Files/MongoDb/Server/4.0/bin:/c/ProgramData/chocolatey/bin:/c/Program Files (x86)/Yarn/bin:/cmd:/c/Program Files/nodejs:/c/Program Files/Go/bin:/c/Users/backend/AppData/Local/Microsoft/WindowsApps:/c/Users/backend/AppData/Local/Programs/Microsoft VS Code/bin:/c/Users/backend/AppData/Local/GitHubDesktop/bin:/c/Users/backend/Documents/goworkspace/bin:/c/Users/backend/go/bin:/usr/bin/vendor_perl:/usr/bin/core_perl

这让我感到困惑,因为当我运行 go install 时,它实际上将程序存储在:

/c/Users/backend/Documents/goworkspace/bin/test.exe

以下是我的 go env 输出:

set GO111MODULE=
set GOARCH=amd64
set GOBIN=C:\Users\backend\Documents\goworkspace\bin
set GOCACHE=C:\Users\backend\AppData\Local\go-build
set GOENV=C:\Users\backend\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\backend\Documents\goworkspace\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\backend\Documents\goworkspace
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.5
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\backend\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\backend\AppData\Local\Temp\go-build3318698682=/tmp/go-build -gno-record-gcc-switche

更多关于Golang安装出现问题...有什么解决办法?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

谢谢!

更多关于Golang安装出现问题...有什么解决办法?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


太棒了,感谢您的见解。我会研究一下这个!

@Colton

所有的路径设置看起来都是正确的。而且你提到 test.exe 确实被创建了。

你是否可能在 $PATH 环境变量中的其他地方有另一个 test.exe?(Unix 系统包含一个 test 命令,也许 GitBash 也有它……)

如果你给这个二进制文件起一个不同的名字,它能正常运行吗?

正如 Christof 所说,POSIX 定义了一个测试命令。

你可以使用 which testwhich -a test 来检查,第一个命令可能会显示来自 git bash 位置的测试或“内置”提示,后者也会显示你的 Go 程序,但不会排在第一位。

可能更简单的做法是不要将你的程序命名为 test

快速分享一点想法。当我看到你的配置时,我觉得可以提供一个快速建议,考虑简化设置,直接使用 WSL2 而不是 gitbash/cygwin 风格的配置。拥有正常的 Ubuntu 行为,而不混合 Linux/Windows 路径等,这非常好。我认为,如果你来自 Linux 但被迫使用 Windows,gitbash/cygwin 在它们那个时代很棒,但在处理路径/环境这类问题时,它们可能会带来更多令人困惑的问题。我在过去两年工作中使用 macOS,但在家里的系统上喜欢使用带 Ubuntu 20.04 的 WSL2。无论如何,祝你好运。

从你的环境配置来看,go install 确实将 test.exe 安装到了正确的目录 C:\Users\backend\Documents\goworkspace\bin,并且该目录已包含在 PATH 环境变量中。问题可能在于 GitBash 的 test 命令与 Windows 系统的内置命令冲突。

在 GitBash 中,test 是一个 shell 内置命令,用于条件测试。当你输入 test 时,GitBash 会优先执行内置命令而非你的 test.exe。你可以通过以下方式验证:

# 查看 test 命令的类型
type test
# 输出可能是:test is a shell builtin

# 使用完整路径执行
/c/Users/backend/Documents/goworkspace/bin/test.exe

# 或者添加 .exe 后缀
test.exe

要解决这个问题,有几种方法:

  1. 使用完整路径或相对路径
# 绝对路径
/c/Users/backend/Documents/goworkspace/bin/test.exe

# 相对路径(如果当前在 bin 目录)
./test.exe
  1. 重命名可执行文件
# 将 test.exe 重命名为其他名称
mv /c/Users/backend/Documents/goworkspace/bin/test.exe /c/Users/backend/Documents/goworkspace/bin/myapp.exe
# 然后就可以直接运行
myapp.exe
  1. 在 Go 代码中指定不同的输出名称
// 在 main.go 所在目录创建 go.mod 文件时指定模块名
// go mod init myapp
// 这样 go install 会生成 myapp.exe 而不是 test.exe
  1. 使用 Windows 命令提示符或 PowerShell: 在 Windows 原生终端中,test 命令不会与 shell 内置命令冲突:
# 在命令提示符中
test.exe
  1. 在 GitBash 中创建别名
# 在 ~/.bashrc 中添加
alias mytest='/c/Users/backend/Documents/goworkspace/bin/test.exe'
# 重新加载配置后
mytest

环境配置本身是正确的,GOBIN 指向 C:\Users\backend\Documents\goworkspace\bin,且该路径已在 PATH 中。问题纯粹是命令名称冲突导致的。

回到顶部