我一直遇到挂在Windows上的所有Go程序的问题,甚至是一个简单的Hello world程序.我已经多次重新安装Golang而没有任何改变.我无法使用Ctrl + X或Ctrl + D来关闭程序.它仍会产生将显示在Process Monitor上的进程.但我不能从那里或从命令行杀死它.
在reddit上发布了类似的问题https://www.reddit.com/r/golang/comments/2lvnqk/not_even_hello_world_works/.但那仍然没有解决方案.
这是我正试图立即运行的程序:
package main import "fmt" func main() { fmt.Println("Hello, world!") }
运行它go run -x
给出了这个输出:
WORK=C:\Users\User\AppData\Local\Temp\go-build882050150 mkdir -p $WORK\command-line-arguments\_obj\ mkdir -p $WORK\command-line-arguments\_obj\exe\ cd E:\go\src\github.com\test\hello "C:\\Go\\pkg\\tool\\windows_amd64\\compile.exe" -o "C:\\Users\\User\\AppData\\Local\\Temp\\go-build882050150\\command-line-arguments.a" -trimpath "C:\\Users\\User\\AppData\\Local\\Temp\\go-build882050150" -p main -complete -buildid 0180ed6e175ea3e4bc497fc21fe0319a733a9c8e -D _/E_/go/src/github.com/test/hello -I "C:\\Users\\User\\AppData\\Local\\Temp\\go-build882050150" -pack "E:\\go\\src\\github.com\\test\\hello\\main.go" cd . "C:\\Go\\pkg\\tool\\windows_amd64\\link.exe" -o "C:\\Users\\User\\AppData\\Local\\Temp\\go-build882050150\\command-line-arguments\\_obj\\exe\\main.exe" -L "C:\\Users\\User\\AppData\\Local\\Temp\\go-build882050150" -w -extld=gcc -buildmode=exe -buildid=0180ed6e175ea3e4bc497fc21fe0319a733a9c8e "C:\\Users\\User\\AppData\\Local\\Temp\\go-build882050150\\command-line-arguments.a" $WORK\command-line-arguments\_obj\exe\main.exe
之后,它只是坐在那里,没有任何剂量.无论我运行什么程序都会永远挂起.
不知道从哪里开始.我真的没有在Windows上开发,但我试图在Ubuntu上进行交叉编译,并且遇到了交叉编译的二进制文件,我以为我会尝试直接在Windows上编译.但似乎我的Windows不喜欢Golang编译的二进制文件.
Go版本是1.5.1 windows/amd64.
这是输出go env
:
set GOARCH=amd64 set GOBIN= set GOEXE=.exe set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOOS=windows set GOPATH=E:\go set GORACE= set GOROOT=C:\Go set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64 set GO15VENDOREXPERIMENT= set CC=gcc set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 set CXX=g++ set CGO_ENABLED=1
JDWardle.. 9
阿瓦斯特愚蠢.禁用Avast和程序都工作....
当然,让Avast禁用是不理想的,所以我不得不想办法排除go文件.遗憾的是,除非您为二进制文件设置单独的排除项,否则无法自行排除编译文件.但是,排除go特定目录将起作用.
我最后排除了为我而去的安装位置和我C:\Go
的GOPATH目录E:\go
.
只要从这两个目录中的任何一个运行二进制文件,这大部分都有效,但我仍然遇到使用该go run
命令的问题.使用该go run -x
命令,我能够找到Go放置临时编译二进制文件的位置.这最终成了C:\Users\username\AppData\Local\Temp\go-build1234\
.但是每次我使用时都会创建一个新目录,go run
因此我必须在Avast上创建一个带有两个通配符的排除C:\Users\username\AppData\Local\Temp\go-build*\*
.现在程序将正常运行.
这些是我最终得到的排除:
阿瓦斯特愚蠢.禁用Avast和程序都工作....
当然,让Avast禁用是不理想的,所以我不得不想办法排除go文件.遗憾的是,除非您为二进制文件设置单独的排除项,否则无法自行排除编译文件.但是,排除go特定目录将起作用.
我最后排除了为我而去的安装位置和我C:\Go
的GOPATH目录E:\go
.
只要从这两个目录中的任何一个运行二进制文件,这大部分都有效,但我仍然遇到使用该go run
命令的问题.使用该go run -x
命令,我能够找到Go放置临时编译二进制文件的位置.这最终成了C:\Users\username\AppData\Local\Temp\go-build1234\
.但是每次我使用时都会创建一个新目录,go run
因此我必须在Avast上创建一个带有两个通配符的排除C:\Users\username\AppData\Local\Temp\go-build*\*
.现在程序将正常运行.
这些是我最终得到的排除: