Go程序挂在Windows 10上

时间:2015-12-02 02:20:47

标签: go windows-10

我一直遇到挂在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

1 个答案:

答案 0 :(得分: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时,go都会创建一个新目录,因此我必须在Avast上创建一个排除,其中两个通配符设置为C:\Users\username\AppData\Local\Temp\go-build*\*。现在程序可以正常运行。

这些是我最终的排除: Go Avast exclusions