登录
首页 >  Golang >  Go问答

解决GOPATH被忽略,只有GOROOT生效的import-local-package问题

来源:stackoverflow

时间:2024-03-25 13:36:34 318浏览 收藏

对于 Go 新手,在配置环境时可能会遇到一个问题:导入本地包时,Go 仅识别 GOROOT 而忽略 GOPATH。本文将探讨解决此问题的步骤,指导用户正确设置项目结构并启用 Go 模块。通过将项目放置在 GOPATH 之外,创建模块并使用完全限定的模块名称,可以解决这个问题,从而实现本地包的顺利导入。

问题内容

我是 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" 设置的

使用 go env -w go111module=on 来“开启”gomod

编辑项目的 .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     )

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


正确答案


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

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

首先,将 $gopath 设置为类似 $home/go 的值,您可以使用它来 go get 您想要跨项目使用的各种工具(例如 dlv 调试器等),但不要将您的那里的项目

启动新项目时,将其放在外部 $gopath$home/goprojects/test (您可以保留 src 下的项目布局,但那里不需要 src): p>

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

以上就是《解决GOPATH被忽略,只有GOROOT生效的import-local-package问题》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>