首页 > 解决方案 > 迁移到 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默认值从更改autoon. 因此,仍然可以通过设置来恢复旧的行为GO111MODULE=auto

然而,Golang 开发人员已经宣布他们希望在 Go 1.17 中放弃对 GOPATH 样式项目的支持:

我们计划在 Go 1.17 中放弃对 GOPATH 模式的支持。换句话说,Go 1.17 将忽略 GO111MODULE。如果您的项目不是以模块感知模式构建的,那么现在是迁移的时候了。

标签: gogo-modules

解决方案


您可以在生成的 mod 文件中明确定义使用 replace 关键字来引用本地模块。

replace packagename => /usr/share/gcode


推荐阅读