【问题标题】:How to import a golang own package?如何导入一个golang自己的包?
【发布时间】:2016-09-15 18:33:51
【问题描述】:

我在导入包时遇到问题。我想导入"golang.org/x/tools/cmd/oracle""golang.org/x/tools/oracle" 包。

导入这些包的正确方法是什么?


这是我尝试导入包的方式:

package main

import (
    "fmt"
    "strings"
    "os"
    "os/exec"
    "golang.org/x/tools/oracle"
    "golang.org/x/tools/cmd/oracle"
)

最后两个导入导致以下问题:

====================  Starting Go build  ====================
Cleared problem markers for ProjektGO.
************  Building Go project: ProjektGO  ************
  with GOPATH: /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO
>> Running: /usr/lib/go/bin/go install -v -gcflags "-N -l" ./...
file/main.go:13:2: cannot find package "golang.org/x/tools/cmd/oracle" in any of:
    /usr/lib/go/src/golang.org/x/tools/cmd/oracle (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/cmd/oracle (from $GOPATH)
file/main.go:12:2: cannot find package "golang.org/x/tools/oracle" in any of:
    /usr/lib/go/src/golang.org/x/tools/oracle (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/oracle (from $GOPATH)
   ^^^ Terminated, exit code: 1 ^^^
************  Build terminated.  ************

然后我尝试了这样的事情:

package main

import (
    "fmt"
    "strings"
    "os"
    "os/exec"
    "../../../../../golang.org/x/tools/cmd/oracle"
    "../../../../../golang.org/x/tools/oracle"
)

结果是这样的:

====================  Starting Go build  ====================
************  Building Go project: ProjektGO  ************
  with GOPATH: /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO
>> Running: /usr/lib/go/bin/go install -v -gcflags "-N -l" ./...
can't load package: /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/file/main.go:11:2: import "../../../../../golang.org/x/tools/cmd/oracle" is a program, not an importable package
../../../../golang.org/x/tools/oracle/describe.go:20:2: cannot find package "golang.org/x/tools/go/ast/astutil" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/ast/astutil (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/ast/astutil (from $GOPATH)
../../../../golang.org/x/tools/cmd/oracle/main.go:26:2: cannot find package "golang.org/x/tools/go/buildutil" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/buildutil (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/buildutil (from $GOPATH)
../../../../golang.org/x/tools/oracle/callers.go:11:2: cannot find package "golang.org/x/tools/go/callgraph" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/callgraph (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/callgraph (from $GOPATH)
../../../../golang.org/x/tools/cmd/oracle/main.go:27:2: cannot find package "golang.org/x/tools/go/loader" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/loader (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/loader (from $GOPATH)
../../../../golang.org/x/tools/oracle/callees.go:17:2: cannot find package "golang.org/x/tools/go/pointer" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/pointer (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/pointer (from $GOPATH)
../../../../golang.org/x/tools/oracle/callees.go:18:2: cannot find package "golang.org/x/tools/go/ssa" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/ssa (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/ssa (from $GOPATH)
../../../../golang.org/x/tools/oracle/callees.go:19:2: cannot find package "golang.org/x/tools/go/ssa/ssautil" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/ssa/ssautil (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/ssa/ssautil (from $GOPATH)
../../../../golang.org/x/tools/oracle/describe.go:22:2: cannot find package "golang.org/x/tools/go/types/typeutil" in any of:
    /usr/lib/go/src/golang.org/x/tools/go/types/typeutil (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/go/types/typeutil (from $GOPATH)
../../../../golang.org/x/tools/cmd/oracle/main.go:28:2: cannot find package "golang.org/x/tools/oracle" in any of:
    /usr/lib/go/src/golang.org/x/tools/oracle (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/oracle (from $GOPATH)
../../../../golang.org/x/tools/oracle/callees.go:20:2: cannot find package "golang.org/x/tools/oracle/serial" in any of:
    /usr/lib/go/src/golang.org/x/tools/oracle/serial (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/oracle/serial (from $GOPATH)
../../../../golang.org/x/tools/oracle/implements.go:21:2: cannot find package "golang.org/x/tools/refactor/importgraph" in any of:
    /usr/lib/go/src/golang.org/x/tools/refactor/importgraph (from $GOROOT)
    /home/haapoo/go/src/github.com/ProjektarbeitGo/ProjektGO/src/golang.org/x/tools/refactor/importgraph (from $GOPATH)
   ^^^ Terminated, exit code: 1 ^^^
************  Build terminated.  ************

我的 GOROOT 是 /usr/lib/go ,我的 GOPATH 是 /home/haapoo/go 。 我知道关于 gopath 和 goroot 的问题经常出现,但也许有人有想法。

PS:我使用 goclipse

问候 哈哈

【问题讨论】:

  • 你需要运行 go get golang.org/x/tools/oracle 。这些不是标准包
  • golang.org/x/tools/cmd/oracle 是一个main 包,你不能导入它。
  • 对不起,我应该提一下我执行了“go get golang.org/x/tools/cmd/oracle”命令。我还在命令行中使用 oracle,并使用了 os.exec 命令 (darrencoxall.com/golang/executing-commands-in-go)。好的导入“golang.org/x/tools/cmd/oracle”没有意义。我想像甲骨文的门面一样编程。我可以在没有 os.exec 命令的情况下使用 oracle 功能吗?所以我可以调用 oracle 函数?
  • oracle 主逻辑位于 golang.org/x/tool/oracle 包中,该包可导入并允许执行查询。

标签: go goclipse


【解决方案1】:

如果你需要在Golang中导入不同的同名包,可以这样(随便命名):

import (
    "text/template"
    ht "html/template"
)

但在“golang.org/x/tools/cmd/oracle”的情况下
它不是一个包,它只有 main.go,你需要构建/安装它。它是一个命令行工具:

Run 'oracle -help' for more information.
Go source code oracle.
Usage: oracle [<flag> ...] <mode> <args> ...

The -format flag controls the output format:
        plain   an editor-friendly format in which every line of output
                is of the form "pos: text", where pos is "-" if unknown.
        json    structured data in JSON syntax.
        xml     structured data in XML syntax.

【讨论】:

    【解决方案2】:

    您是否运行过 go get golang.org/x/tools/oraclego get golang.org/x/tools/cmd/oracle ?这应该在正确设置$GOPATH 之后运行。

    【讨论】:

      【解决方案3】:
      1. 永远不要设置 GOROOT。 (除非你知道你在做什么)。 不需要进行设置。

      2. 因为这是一个主包,所以不能导入 golang.org/x/tools/cmd/oracle。至少你不能以简单的方式做到这一点,而且你也不应该这样做(除非你想测试导入的主包)。

      3. 导入并不神奇,您必须在使用前下载包。像其他人提到的那样使用go get

      4. 在命令行上构建以确保您在做什么以及如何做(IDE 往往会在此处混淆)。

      【讨论】:

        【解决方案4】:

        oracle是源码分析命令行工具,不能导入。使用以下命令获取:

        go get golang.org/x/tools/cmd/oracle
        

        这将在您的 $GOPATH/bin 目录中创建一个名为 oracle 的可执行文件。

        访问 http://golang.org/s/oracle-user-manual 以获取完整的 oracle 文档。

        【讨论】:

          猜你喜欢
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          • 2015-01-09
          • 1970-01-01
          • 1970-01-01
          • 2016-03-10
          • 1970-01-01
          • 2020-09-12
          相关资源
          最近更新 更多