软件包不在 GOROOT 中

agr*_*riz 17 go

main.go:5:2: 包greetings不在GOROOT中 (C:\Program Files\Go\src\greetings)

我正在阅读 Head First go ,它是为了在 c:/users/username/go/src/packagename 和 c:/users/username/go/src/project_name 中创建文件夹而编写的

当我尝试跑步时

go run main.go从project_name文件夹中,我收到以下错误。 main.go:5:2: package greetings is not in GOROOT (C:\Program Files\Go\src\greetings)

C:\Users\agriz>go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\agriz\AppData\Local\go-build
set GOENV=C:\Users\agriz\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\agriz\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\agriz\go
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.16.7
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
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\agriz\AppData\Local\Temp\go-build2047492330=/tmp/go-build -gno-record-gcc-switches
Run Code Online (Sandbox Code Playgroud)

我不想将代码保留在 C 盘中。我想从 D:/ 运行代码,可以吗?我怎样才能做到这一点?

agr*_*riz 19

set GO111MODULE=offset GOPATH想要的位置也很好。

go env -w GO111MODULE=off
Run Code Online (Sandbox Code Playgroud)

set GOPATH=D:\go
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。

  • 你能解释一下为什么它有效以及“GO111MODULE”有什么问题吗? (8认同)
  • @SMMousavi 我知道这已经晚了,但你可以在这里找到答案,https://www.positioniseverything.net/package-is-not-in-goroot (2认同)

Sha*_*shi 6

您可以使用 go mod 并明确给出要初始化的模块的路径。

来自文档

Init 初始化并将新的 go.mod 写入当前目录,实际上创建了一个以当前目录为根的新模块。文件 go.mod 不得已存在。如果可能,init 将从导入注释(请参阅“go help importpath”)或版本控制配置中猜测模块路径。要覆盖此猜测,请提供模块路径作为参数。

例子

   'go mod init example.com/m' to initialize a v0 or v1 module
   'go mod init example.com/m/v2' to initialize a v2 module
Run Code Online (Sandbox Code Playgroud)

有关如何设置 go 程序的更多详细信息,请参阅此处