登录
首页 >  Golang >  Go问答

迁移到 Go 模块,同时继续使用分发包

来源:stackoverflow

时间:2024-04-17 09:15:33 105浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《迁移到 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。如果您的项目不是以模块感知模式构建的,那么现在是时候进行迁移了。

更新 2023-02-19: 从 go 1.19.5 (fedora 37) 开始,go111module=off 仍然适用于构建 gopath 风格(即非模块化)项目。示例:

export GOPATH=$HOME/go:/usr/share/gocode GOPROXY=off GO111MODULE=off
go build helloworld.go

显然,go 团队调整了他们的 go11module 弃用计划,但尚未针对任何新的未来版本进行删除。


正确答案


您可以在生成的 mod 文件中使用替换关键字显式定义来引用您的本地模块。

replace 软件包名称 => /usr/share/gcode

好了,本文到此结束,带大家了解了《迁移到 Go 模块,同时继续使用分发包》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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