📜  go docker $GOPATH go.mod 存在但不应该命令'bin sh -c go mod download go build -o main'返回一个非零代码:1 (1)

📅  最后修改于: 2023-12-03 14:41:32.081000             🧑  作者: Mango

问题描述

当运行命令bin sh -c go mod download go build -o main时,会返回一个非零代码:1。这样的情况通常发生在存在$GOPATHgo.mod文件,但是不应该使用该命令进行构建时。

问题原因

通常,go mod download命令用于将模块的依赖项下载到本地的$GOPATH/pkg/mod目录中,以供构建使用。然后,使用go build命令将代码编译成二进制文件。但是,当使用bin sh -c命令时,该命令会在一个独立的子shell中运行两个命令。因此,go build命令无法找到在go mod download命令中生成的依赖项。

解决方案

为了解决这个问题,我们需要在同一shell中运行两个命令。这可以通过使用一个分号;来实现,如下所示:

go mod download; go build -o main

这样做的好处是,在同一个shell中运行两个命令,使得go build命令能够找到在go mod download命令中生成的依赖项。运行上述命令时,应该可以成功地构建应用程序。

总结

当存在$GOPATHgo.mod文件时,我们应该注意使用正确的命令进行构建。在同一个shell中运行go mod downloadgo build命令可以帮助我们避免类似的错误。