【问题标题】:go install in golang not creating sub package archivesgo install in golang 不创建子包档案
【发布时间】:2014-09-10 20:38:31
【问题描述】:

我在golang中创建了一个名为go-orm的包,其结构如下。

go-orm
--| mine.go
--| src
-----| src.go
-----| db
--------| DBConnection.go

当我在 go-orm 目录中运行命令“go install”时,它只创建 go-orm.a 但不是 src.a 和 db.a(子目录或包)。当我检查 使用 mgo 包“安装”它为它的子目录“bson”创建了 .a 文件。

我的包需要相同的功能。我需要什么改变 包使这成为可能。

编辑 1

我的包在 GOPATH/src/ 目录下。我所有的子包(src 和 db)都存在。

【问题讨论】:

  • DBConnection.go 是否以“package go-orm/src/db”开头?您的$GOPATH 环境变量是否引用/path/to,并立即在其中包含src/go-orm 文件夹?而你的 .a 是在$GOPATH/pkg/<arch>/go-orm?中生成的?
  • 我在 $GOPATH/pkg/ 中找到了 go-orm.a。但是不会创建像 src 和 db 这样的子包的档案。当最终用户运行“go get mypackage_path”时,我需要所有存档(go-orm.a、src.a 和 db.a)才能使我的包正常工作。
  • 然后让我们检查一下您的资源是如何组织的。你的资源在$GOPATH/src/go-orm 吗?你能回答我最初关于DBConnection.go 的问题吗?文件夹$GOPATH/src/go-orm/src/db 存在吗?
  • 我的 DBConnection.go 以“package db”而不是“package go-orm/src/db”开头。不允许使用“package go-orm/src/db”。我们不能在那里指定路径。我针对您的其他问题更新了我的问题。

标签: go


【解决方案1】:

Package build

走路径

Go 路径是包含 Go 源代码的目录树列表。它 被咨询以解决在标准中找不到的进口 去树。默认路径是GOPATH环境的值 变量,解释为适合操作的路径列表 系统(在 Unix 上,变量是一个冒号分隔的字符串;在 Windows 上, 分号分隔的字符串;计划 9 中的列表)。

Go 路径中列出的每个目录都必须具有规定的结构:

src/ 目录包含源代码。 'src' 下面的路径决定 导入路径或可执行文件名。

pkg/ 目录包含已安装的软件包对象。就像在 Go 树中一样, 每个目标操作系统和架构对都有自己的 pkg (pkg/GOOS_GOARCH) 的子目录。

如果 DIR 是 Go 路径中列出的目录,则源文件位于 DIR/src/foo/bar 可以作为 "foo/bar" 导入并且有它的编译形式 安装到“DIR/pkg/GOOS_GOARCH/foo/bar.a”(或者,对于 gccgo, “DIR/pkg/gccgo/foo/libbar.a”)。

bin/ 目录保存已编译的命令。每个命令都以 它的源目录,但只使用最后一个元素,而不是整个 小路。也就是说,在 DIR/src/foo/quux 中带有 source 的命令是 安装到 DIR/bin/quux,而不是 DIR/bin/foo/quux。 foo/ 是 剥离,以便您可以将 DIR/bin 添加到 PATH 以获取 安装命令。

这是一个示例目录布局:

GOPATH=/home/user/gocode

/home/user/gocode/
    src/
        foo/
            bar/               (go code in package bar)
                x.go
            quux/              (go code in package main)
                y.go
    bin/
        quux                   (installed command)
    pkg/
        linux_amd64/
            foo/
                bar.a          (installed package object)

使用规定的目录结构,包括使用src 作为目录名。根据例子。不要使用srcpkgbin 作为包名。

go-orm
--| mine.go
--| src     <== !? Don't use src as a package name.
-----| src.go
-----| db
--------| DBConnection.go

【讨论】:

    【解决方案2】:
    After long analysis I found that "import" statement in root directory go file
    

    可以解决问题。我在根目录中创建了一个名为 create_archieve.go 的额外文件 目录(go-orm)。在里面我刚刚插入了以下几行 go-orm.a、src.a 和 db.a.

    create_archieve.go

    包 nosql_orm

    import _"go-orm/src/db"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 2022-07-12
      • 2015-11-08
      • 1970-01-01
      • 2017-02-28
      • 2022-01-18
      • 2014-12-16
      • 2017-12-07
      相关资源
      最近更新 更多