【问题标题】:Why Go put all code in $GOPATH/src为什么 Go 将所有代码放在 $GOPATH/src 中
【发布时间】:2016-08-17 03:56:09
【问题描述】:

当我使用go install做一个包时,我发现Go search the package form two path

  1. /usr/local/Cellar/go/1.6.2/libexec/src/ 去安装目录。许多基础包,如 fmt...

  2. /Users/godtail/Product/go/go_path/src/$GOPATH/src。 $GOPATH 不好,我会改的。

也可以使用相对路径,但不推荐。

我的工作目录总是这样放的。

Product A
    php
    nodejs
    go(i hope to put here)
Product B
    java
    nodejs
...

我该怎么做?或者可能更改目录跟随 Go。
给我一些建议,非常感谢。

【问题讨论】:

    标签: go


    【解决方案1】:

    见:https://golang.org/ref/spec#Packages

    Go 程序是通过将包链接在一起来构建的。一个包在 turn 由一个或多个源文件构成 声明属于的常量、类型、变量和函数 包,并且可以在同一包的所有文件中访问。 这些元素可以导出并在另一个包中使用。

    源文件组织

    每个源文件都包含一个包子句,用于定义要包含的包 它所属的,然后是一组可能为空的导入 声明它希望使用其内容的包的声明, 随后是一组可能为空的函数、类型声明, 变量和常量。

    SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl “;” } .

    您可以将多个src 目录添加到您的$GOPATH

    与系统PATH环境变量一样,Go路径是:分隔的 Go 将在其中查找包的目录列表(;在 Windows 上)。

    因此您可以将您的项目src 目录添加到$GOPATH
    或者只是将您的库包存储在一个 $GOPATH 中。

    【讨论】:

    • 感谢您的回答〜。我应该将我的库包移动到 $GOPATH 目录。还可以提高重用性。当我使用 git 时,我如何推送我的 lib 包。或者我有一些产品使用相同的 lib 包。
    • 有没有像 composer 或 npm 这样的包管理器?然后我只需要编辑配置 json。它可以从远程拉取代码。
    【解决方案2】:

    您不需要这样做。 Golang 即将推出一个官方工具,叫做dep,类似于python 的pip 或node.js 的npm

    【讨论】:

    • 这仍然有效吗?
    • @MarianPaździoch 不,改用 go mod。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多