23年了,GOPATH和go.mod 还在冲突!

现在 新配了 go环境 设置了GOROOT,GOPATH ,发现引用别的包会出问题。

一直会报 package XX not in GOROOT (xxxx)

我的目录:

我的开发目录: /home/fate/go_projects/

老样子,下面有  /home/fate/go_projects/bin,  /home/fate/go_projects/pkg,

/home/fate/go_projects/src 三个目录

其中src下面:

现要开发review_1 这个工程

现记录下:

1)GOPATH 和  go mod init xx 是冲突的!

老老实实置空GOPATH 

$export GOPATH=

2)在 /home/fate/go_projects/src/review_1 下,也就是我目前的工程之一

 运行 $go mod init review_1

之后才会有go.mod 生成

3)在这个工程中我需要"github.com/montanaflynn/stats"这个库

然后:

go get github.com/montanaflynn/stats

go install github.com/montanaflynn/stats

4) main.go 中引入dbutils 以及 github.com/montanaflynn/stats 包:

使用stats:

调用 dbutils.GetConn()

就不报错了。。

关键解决:

  1. 废弃GOPATH 的配置;

  1. 要在src/下的对应文件夹(src/review_1)中 进行 go mod init review_1 ,这两名最好一样;

  1. 调用时,最后一层包名必须使用,即:dbutils.GetConn() 而不是直接 GetConn()

此外,包中供外部引用的函数必须首字母大写。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个错误是因为在gopath目录下存在了一个名为"go.mod"的文件,然而这个文件却不应该存在于此。 在Go 1.11及以上版本中,引入了Go Modules的概念,用于管理依赖关系,并且在package之间的访问更加灵活,因此如果希望使用Go Modules,就需要在项目中创建一个"go.mod"文件。 但是,在使用GOPATH方式进行包管理时,不需要使用Go Modules,因此也不应该在GOPATH目录下创建"go.mod"文件。 因此,解决这个错误的方法就是删除GOPATH目录下的"go.mod"文件,这样就可以避免这个错误的发生了。同时,如果需要使用Go Modules对项目进行依赖管理,就需要在项目根目录下创建一个新的"go.mod"文件,并按照相关规则管理依赖关系。 ### 回答2: $gopath/go.mod 存在但不应该存在的问题可能是因为在 Go 1.11 及其以后的版本中,modules 功能被引入并实现了对包依赖管理的支持,而默认情况下,Go modules 功能是开启的。在使用 Go 1.11 及其以后的版本时,如果我们在 GOPATH 下创建了项目,这可能会导致一些问题。如果您在 GOPATH 中使用 Go modules,那么您可能会遇到 $gopath/go.mod 的存在问题。 在 Go 1.11 及其以后的版本中,默认情况下,在 GOPATH 下使用模块化的方式管理包依赖是不被支持的。这是因为 mod 模式需要在独立的模块目录下创建 go.mod 文件。如果在 GOPATH 下使用 mod 模式,会导致 go.mod 文件被创建在 $gopath/go.mod 目录下,这也就是出现 "$gopath/go.mod exists but should not" 这个提示的原因。 因此,为了解决这个问题,我们需要在 GOPATH 外创建一个独立的 mod 模式目录,然后将项目迁移到该目录下,并在该目录下创建适当的 go.mod 文件来构建我们的项目。为此,我们可以按照以下步骤操作: 1. 在 GOPATH 的外面创建一个新的目录,例如 $HOME/go。 2. 将项目从 GOPATH 目录中迁移到新的目录中。 3. 在新的目录中初始化 mod 模式: $ cd $HOME/go/myproject $ go mod init myproject 4. 然后继续使用 go mod 命令来管理您的包依赖。 总之,$gopath/go.mod 存在但不应该存在的问题是因为在使用 Go 1.11 及其以后的版本时,在 GOPATH 下使用 mod 模式管理包依赖是不被支持的。为了避免这种问题,我们可以在 GOPATH 外创建一个独立的 mod 模式目录,然后将项目迁移到该目录下,并在该目录下创建适当的 go.mod 文件来构建我们的项目。 ### 回答3: 在使用Go进行开发时,我们经常会遇到“$GOPATH/go.mod存在但不应该存在”的问题,这个问题主要是由于Go的模块化开发特性所引起的。 首先,Go的模块化开发特性是从Go 1.11版本开始引入的。它使我们可以在不同项目之间共享代码,并且可以方便地管理代码依赖。当我们在安装一个Go包时,它会自动下载依赖的包并存储在本地的$GOPATH/pkg/mod目录中。而在使用Go模块化开发时,go.mod文件会被创建用于记录依赖的包和版本号信息。 当我们创建一个新的Go项目时,会自动创建一个go.mod文件。但是,如果我们不打算使用模块化开发,我们就需要删除这个文件。 如果出现“$GOPATH/go.mod存在但不应该存在”的问题,有以下可能原因: 1.在使用Go mod开发时,您可能已经切换了到一个不同的GOPATH,这会导致Go mod读取到现有的go.mod文件。 解决方法:请在项目目录下运行以下指令,以删除错误的go.mod文件: rm go.mod 2.您可能正在使用一个老版本的Go,它不支持Go模块化开发功能,所以它会尝试在GOPATH中寻找go.mod文件。 解决方法:升级Go到最新版本,这样会自动启用Go模块化开发功能。 总而言之,“$GOPATH/go.mod存在但不应该存在”的问题通常是由于模块化开发特性引起的。您可以根据上述方法,解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenxin0215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值