英文:
How to use an alternate go.mod file for local development?
问题
目前我正在开发一个使用Serverless Framework和Go语言的API。
我正在使用Serverless-offline插件进行本地测试。
这个API依赖于其他几个仓库(我也在维护),我使用go.mod
文件进行导入。
然而,我在完善我的开发工作流程方面遇到了一些困难。
目前,如果我想对这个API所依赖的仓库进行更改,我必须修改项目的go.mod
文件,以便进行测试目的的替换指令,但是在部署到生产环境之前,我又必须手动改回来。
基本上,我正在寻找一种只在本地开发时应用替换指令的方法。其他人是如何解决这个问题的?
附加问题:有没有办法在Docker中运行Serverless offline?我发现在裸机上运行serverless-offline会导致不同开发环境之间的不一致性。
英文:
Currently I am working on an API which uses Serverless Framework with Go.
I'm using the Serverless-offline plugin for local testing.
This API depends on a few other repositories (which I also maintain), which I import using the go.mod
file.
However I am having a hard time refining my developer workflow.
Currently, if I want to make changes in a repository which this API depends upon, I have to alter the projects go.mod
to include replace directives for the purpose of testing, but then I'm having to manually change it back for deployment to production.
Basically I'm looking for a way to include replace directives, which only get applied during local development. How has everyone else dealt with this problem?
Bonus question: Is there any way to run Serverless offline in docker? I'm finding that serverless-offline running on the bare metal is causing inconsistencies between different developers environments.
答案1
得分: 7
你可以使用-modfile
选项来运行带有替代go.mod
文件的go
命令:
来自构建命令:
-modfile=file.mod
标志指示go命令读取(可能还会写入)一个替代文件,而不是模块根目录中的go.mod
。该文件的名称必须以.mod
结尾。必须仍然存在名为go.mod
的文件,以确定模块根目录,但不会访问它。当指定了-modfile
时,还会使用替代的go.sum
文件:其路径是通过修剪-modfile
标志的.mod
扩展名并追加.sum
来派生的。
为开发和构建创建一个带有必要的replace
指令的local.go.mod
文件,例如:
go build -modfile=local.go.mod ./...
英文:
You can run go
commands with an alternate go.mod
file with the -modfile
option:
From Build commands:
> The -modfile=file.mod
flag instructs the go command to read (and
> possibly write) an alternate file instead of go.mod
in the module root
> directory. The file’s name must end with .mod
. A file named go.mod
> must still be present in order to determine the module root directory,
> but it is not accessed. When -modfile
is specified, an alternate
> go.sum
file is also used: its path is derived from the -modfile
flag
> by trimming the .mod extension and appending .sum.
Create a local.go.mod
file with the necessary replace
directive for development and build, for example, with:
go build -modfile=local.go.mod ./...
答案2
得分: 1
在Go 1.18或更高版本中,最简单的方法是使用新的Go工作区功能。请参阅以下链接:
基本上,使用go work init
命令创建一个go.work
文件,该文件可以包含局部替换指令,超出了go.mod
的范围。
英文:
The easiest way to do this in Go 1.18 or later is using the new Go workspaces feature. See
Essentially, use go work init
to create a go.work
file, that can contain local replacement directives, outside the scope of your go.mod
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论