微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决import-local-package问题:忽略GOPATH,只有GOROOT生效

如何解决如何解决import-local-package问题:忽略GOPATH,只有GOROOT生效

我是 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     )

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

解决方法

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

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

当开始一个新项目时,把它outside $GOPATH 放到 $HOME/GoProjects/test(你可以保留你在 src 下的项目布局,但你不需要 {{ 1}} 那里):

src

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

package xxx

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

,

首先,不要担心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。完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。