0

我是 GO 的新手,并且已经在环境配置中卡住了好几个小时。

我成功运行了一些测试项目,但是当我尝试导入我的自定义本地包(比如 xxx)时,“go run”命令失败,记录如下:

*test/main/main.go:6:2: package test/xxx is not in GOROOT (/usr/local/go/src/test/xxx)*

奇怪的是,在我的 ubuntu 计算机上导入本地包时,GOPATH 似乎被忽略了。

go 版本是go1.16.5 linux/amd64

GOPATH 使用 export GOPATH="$HOME/GoProjects"设置

GOROOT 是使用 export GOPATH="/usr/local/go"设置的

GoMod 使用 go env -w GO111MODULE=on “开启”

编辑完项目的 .go 文件后,在项目的根文件夹($GOPATH/src/test)下输入命令“go mod init”和“go mod tidy”,项目文件结构如下:

/src
  /.vscode
    -launch.json
  /gitbub.com
  /test
    /main
      -main.go     (here: import "test/xxx")
    /xxx
      -xxx.go      (here: package xxx)
    -go.mod        (almost empty - line 1: module test
                                   line 2: 
                                   line 3: go 1.16     )

我应该怎么做才能解决这个问题?

4

2 回答 2

3

假设(从您的帖子中不清楚)整棵树都在您的$HOME/GoProjects. 使用模块时;不要将您的项目放在 GOPATH 中,因为混合 GOPATH 和模块只会导致问题。

首先,设置$GOPATH$HOME/go您可以用于go get跨项目使用的各种工具(例如dlv调试器等)但不要将您的项目放在那里的东西

当开始一个新项目时,把它放在外面 你可以保留你下面的项目布局,但你不需要那里):$GOPATH$HOME/GoProjects/testsrcsrc

GoProjects
  /test
    /main
      -main.go
    /xxx
      -xxx.go

在项目目录(此处test)中运行go mod init NAME,其中 NAME 是您的模块的名称。不要只使用test完全限定的名称,这会将您的项目命名为您的“域”(例如github.com/yourusername/test)。从您的模块导入包时,将使用该名称。因此,main.go您将像这样导入xxx包(需要具有package xxx):

import "github.com/yourusername/test/xxx"

在此处查看有关模块的更多信息:https ://blog.golang.org/using-go-modules

于 2021-06-23T03:34:32.193 回答
0

首先,别再担心了GOPATH。那是旧的东西,你不需要再这样做了。然后,在某个地方创建一个文件夹test(不需要与 有任何关系GOPATH,只需放在当前目录或任何您想要的地方)。然后制作test/xxx. 然后制作test/xxx/xxx.go

package xxx

const X = 1

然后制作文件夹test/main。然后制作test/main/main.go

package main
import "test/xxx"

func main() {
   println(xxx.X)
}

然后回去test,做go mod init test。然后回去test/main,做go build。完毕。

于 2021-06-23T03:33:16.570 回答