go - 迁移到 Go 模块,同时继续使用分发包
问题描述
我有一个基于 GOPATH 的项目,我目前在 Fedora 上构建这样的项目:
sudo dnf install golang-etcd-bbolt-devel golang-x-sys-devel golang-x-text-devel
GOPATH=$HOME/go:/usr/share/gocode go build
我的项目(gonzofilter)实现了一个命令行实用程序,因此源文件位于主包中(即它们有一个package main
声明)。
对于 Fedora 34 及更高版本,Go 似乎删除了对构建 GOPATH 样式项目的支持,并且确实必须使用 Go 模块:
go build
go: cannot find main module; see 'go help modules'
那篇Go 博客文章涵盖了我的情况(-> '没有依赖管理器'),但它没有明确提到如何处理主包项目或分发提供的依赖项。
那么,我该如何迁移这样的项目呢?
我如何告诉 Go/go mod tidy
在 下查找我的依赖项/usr/share/gocode
?
编辑:准确地说:Fedora 34 带有 Go 1.16,它“只是”将GO111MODULE
默认值从更改auto
为on
. 因此,仍然可以通过设置来恢复旧的行为GO111MODULE=auto
。
然而,Golang 开发人员已经宣布他们希望在 Go 1.17 中放弃对 GOPATH 样式项目的支持:
我们计划在 Go 1.17 中放弃对 GOPATH 模式的支持。换句话说,Go 1.17 将忽略 GO111MODULE。如果您的项目不是以模块感知模式构建的,那么现在是迁移的时候了。
解决方案
您可以在生成的 mod 文件中明确定义使用 replace 关键字来引用本地模块。
replace packagename => /usr/share/gcode
推荐阅读
- javascript - React 不会渲染从异步函数返回的东西
- git - git不会将一个文件同步到我的macOS本地,因为还有另一个大写文件名,我该怎么办?
- javascript - 尝试在本机反应中更改日历上的标记日期会导致语法错误
- flutter - Flutter - 如何放置动态图块并根据父宽度换行到下一行
- javascript - 覆盖全局字体大小:62%
- django - 来自单个表的两个模型的查询集
- python - 是否可以修改 Adafruit DHT22 库以支持 Raspberry Pi 4 Model B (BCM2711)?
- javascript - v-file-input .click() 不是函数
- reactjs - 获取 Ant Design Form 的 initialValue 和 getFieldDecorator 形成一个 json 数据
- flutter - 为什么这个颜色列表在 Flutter 中不起作用?