1

I have problems with importing a package. I want to import the "golang.org/x/tools/cmd/oracle" and the "golang.org/x/tools/oracle" package.

Which is the correct way to import these packages?


This the way I try to import the packages:

package main

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

The both last imports leads to the following problem:

====================  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.  ************

Then I tried things like that:

package main

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

And the result was this:

====================  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.  ************

My GOROOT is /usr/lib/go and my GOPATH is /home/haapoo/go . I know the question about gopath and goroot comes often but maybe anyone has an idea.

PS: I use goclipse

Greetings haapoo

haapoo
  • 109
  • 2
  • 9
  • You need to run go get golang.org/x/tools/oracle . These aren't standard package – khrm May 19 '16 at 04:18
  • `golang.org/x/tools/cmd/oracle` is a `main` package, you can't import that. – JimB May 19 '16 at 04:59
  • **Sorry**, I should have mention I execute the 'go get golang.org/x/tools/cmd/oracle' command. I also play with oracle in the command line and I used the os.exec command (http://www.darrencoxall.com/golang/executing-commands-in-go/). Ok to import "golang.org/x/tools/cmd/oracle" makes no sense. I want to program like a facade for oracle. Can I use oracle function without the os.exec command? So I can call the oracle functions? – haapoo May 19 '16 at 11:25
  • The oracle main logic resides in package golang.org/x/tool/oracle which is importable and allows to execute queries. – Volker May 19 '16 at 11:34

4 Answers4

2

Have you run go get golang.org/x/tools/oracle and go get golang.org/x/tools/cmd/oracle ? This should be run after $GOPATH is properly set.

Venkat
  • 1,095
  • 2
  • 13
  • 25
1
  1. Never ever set GOROOT. (Unless you know what you are doing). Setting it is not needed.

  2. As you cannot import golang.org/x/tools/cmd/oracle as this is a main package. At least you cannot do this the easy way and you should not anyway (except if you want to test the imported main package).

  3. Importing is not magic, you'll have to download the package before using it. Use go get as others have mentioned.

  4. Build on the command line to be sure what you are doing and how you are doing it (IDEs tend to blur things here).

Volker
  • 40,468
  • 7
  • 81
  • 87
0

If you need to import different packages of the same name in Golang, this is the way(just name it):

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

but in case of "golang.org/x/tools/cmd/oracle"
it is not a package , it has just main.go and you need to build/install it. it is a command line tool:

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.
0

oracle is a source analysis command line tool, you can't import it. Use the following command to get it:

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

This will create an executable named oracle in your $GOPATH/bin directory.

Visit http://golang.org/s/oracle-user-manual for the complete oracle documentation.