【问题标题】:"go get" command not generating the bin folder when it is run in a shell script“go get”命令在 shell 脚本中运行时不生成 bin 文件夹
【发布时间】:2020-09-24 06:57:24
【问题描述】:

我已经安装了 go 包。当我转到实例(VM)并运行命令时 go get github.com/linkedin/Burrow 从终端/cmd 它正在下载用户主目录下的“src”和“bin”文件夹。但是当我通过在 shell 脚本中设置 GOPATH 来运行相同的命令时,它只是下载“src”文件夹而不生成“bin”文件夹。

SOURCE_DIR="/opt/burrow"
export GOPATH=$SOURCE_DIR/go
go get $BURROW_REPO 

我错过了什么吗?

【问题讨论】:

    标签: go installation package


    【解决方案1】:

    使用go install 命令(Compile and install packages and dependencies)。

    该命令将src 下载到$GOPATH 并将其构建到$GOBIN

    【讨论】:

      【解决方案2】:

      bin 文件夹或src 文件夹不会由go get 命令自动为您创建。以下是在 go 中创建新项目的标准步骤,假设这是您第一次在 go 中创建项目:

      1. 在您的工作区目录下,创建一个项目目录,例如“project1”bin、src 目录。
      2. 设置 GOPATH、GOBIN:

        export GOPATH=~/workspace/project1/

        export GOBIN=~/workspace/project1/bin

      3. 现在如果您只需要源代码,请发送go get github.com/linkedin/Burrow 或者如果您需要二进制文件,请执行 go install github.com/linkedin/Burrow

      二进制文件将存储在 ~/workspace/project1/bin 下,源代码存储在 ~/workspace/project1/ 下

      如果您通过 make 文件或终端创建项目,则适用相同的步骤

      【讨论】:

        【解决方案3】:

        这里发生了很多事情。

        你的困惑的第一点是go get 不下载既不是“src”也不是“bin”:Go 包总是只包含源代码,它们通常不包含“ src" 目录在他们的文件和目录层次结构中。
        相反,这些目录是 Go 工具链的产物。

        第二个混淆点是,从 Go 1.8 开始,Go 工具链使用 fallback value 作为 GOPATH 环境变量(如果未设置),并且在类 Unix 系统上它默认使用名为“go”的目录在执行go 命令的用户的“家”目录下。
        如果此目录丢失,工具链将创建它。

        因此,我对您的问题的抨击是您有某种权限问题:当 GOPATH 未设置时,使用“$HOME/go”——无论 $HOME 扩展为当前用户的任何值;当您手动设置GOPATH 时,某些东西会阻止在$GOPATH 下创建“bin”目录。

        还有另一种可能性:您还设置了GOBIN 环境变量,该变量设置后会覆盖用于安装由go install(和go get)构建的二进制文件的常用位置。
        您可以研究go help environment 的输出以了解有关该主题的更多信息。

        在任何一种情况下,最明智的前进路径是使用-x 命令行选项运行go install,并查看该命令尝试将生成的可执行映像放在哪里,以及失败的原因(如果有的话)。 您可以研究go help installgo help build 的输出以了解有关该主题的更多信息。


        您也可以考虑针对特定情况强制使用 Go 模块: 对于您的用例,运行 GO111MODULES=on go get github.com/linkedin/Burrow 会快五倍。
        一定要先研究go help modulesgo help mod-get的输出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多