卡在 Windows 10 上的 Go 程序

标签 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

最佳答案

Avast 是愚蠢的。禁用 Avast,所有程序都可以正常工作....

当然,禁用 Avast 并不理想,因此我不得不想出一种方法来排除 go 文件。不幸的是,除非您为二进制文件设置单独的排除项,否则无法排除编译后的文件本身。但是,排除 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 -构建*\*。现在程序将正确运行。

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

关于卡在 Windows 10 上的 Go 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34033790/

相关文章:

c# - MVC 显示目录列表未加载应用程序

c++ - 如何从 windows10 中的命令提示符为 opencv 3.0 c++ 程序生成 .exe?

shell - 如何在golang中获取shell命令的实时输出?

go - 如何将 Go 数组传递给 C?

python - 无法安装 pyOpenSSL

windows - 键盘布局未出现在语言和输入法中

python-2.7 - 无法在 Windows 10 上安装适用于 python 的 Google Cloud SDK

csv - 我如何在 golang 中覆盖未知类型的 channel

Go 进程在捕获 SIGINT 和 SIGTERM 时过早死亡

mongodb - mgo 正在将 objectid 设置为 objectidhex,Mongodb 似乎无法读取它