【问题标题】:Go error: unexpected Nul in inputGo 错误:输入中出现意外的 Nul
【发布时间】:2017-11-17 09:25:39
【问题描述】:

我刚刚在 C:/Go 中安装了 go.msi。 我设置了我的 Path(C:\Go\bin) 和 GOPATH(E:\code\go)。但是当我尝试运行“go run test.go”时,出现以下错误:test.go:2:8 : 读取 C:\Go\src\fmt\export_test.go: 输入中的意外 NUL 包主 导入运行时:读取 C:\Go\src\runtime\export_unix_test.go: 输入中的意外 NUL
我无法打开这些文件。 我的代码是:

    package main

    import "fmt"

    func main()  {
        fmt.Println("Something")
    }

test.go文件的路径是E:\code\go\test.go 当我运行 go env 时,我得到:

set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=E:\code\go
set GORACE=
set GOROOT=C:\Go
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
set CXX=g++
set CGO_ENABLED=1
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

go 版本的输出是: 去版本go1.9.2 windows/amd64

【问题讨论】:

  • go envgo version 命令的输出是什么?上面的测试代码也在哪个文件夹中?你在哪个文件夹中运行go run test.go
  • 请把Unicode改成UTF-8,看看能不能用
  • 我支持@Apolozeus:如果您使用记事本创建快速示例,它可以将其保存为“Unicode”,这意味着 Windows 上的 UTF-16LE 而 Go 明确定义它的源代码文件必须编码为 UTF-8。
  • 我使用 Vs 代码来创建它。上面写着 UTF-8。
  • 这是一条隐含的错误消息,说明文件编码错误。感谢您澄清它需要 UTF-8

标签: go


【解决方案1】:

我在 Windows 10 上使用 golang 1.10.0 时遇到了同样的问题:
创建文件以使用echo "my go program" > myProgram.go 运行时,生成了错误的编码:UCS-2 LE BOM

转换为 UTF-8 解决了输入中的 NUL

看起来它是 PowerShell,默认编码为 Windows-1252 (windows system locale),带有 CMDPowerShell Core 这个问题不应该发生。

【讨论】:

  • 谢谢!这解决了我的问题。默认情况下,Windows-1252 中的 powershell 编码(en.wikipedia.org/wiki/Windows-1252)。我不知道为powershell更改此默认值会有什么副作用,所以我只是将VS Code中的默认控制台更改为cmd。使用 echo my text here > myFunc.go 在 cmd 中创建文件按预期工作。
  • 我花了一些时间在我的回答中添加您的评论@EmanuelLindström 再次感谢
  • 哇,奇怪的问题,我使用了 PS 和 "" > main.go,它确实创建了 UTF-16,没有注意到,谢谢。
【解决方案2】:

您的GOPATH 中缺少一些内容。您需要如下文件夹结构:

E:\code\go\src\{repository}\{package}\gofile.go

因此,您可以这样:

E:\code\go\src\local-only\testing\test.go

【讨论】:

  • 只有当您打算导入任何包(位于{workspace}/pkg 下)时才需要该结构。可以在任何地方进行愚蠢的go run 呼叫,例如 OP 发出的呼叫。
  • 我发现 {packege}(testing) 是不必要的。没有它我运行代码
【解决方案3】:

对于它的价值,我刚刚遇到了这个问题,并通过使用管理权限从 cmd.exe 运行 chkdsk /f 解决了它。 (该命令应针对已安装的驱动器运行)

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 2022-12-31
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多