golang/go

go/types: config.Check complains "can't find import" for vendored packages if they haven't been installed

metakeule opened this issue · 4 comments

1 What version of Go are you using (go version)?

$ go version
go version go1.6 linux/amd64

2 What operating system and processor architecture are you using?

$ cat /etc/issue
Ubuntu 15.10 \n \l

$ lscpu
Architecture:          x86_64
...

3 What did you do?

$ tree $GOPATH/src
├── a
│   ├── a.go
│   └── vendor
│       └── b
│           └── b.go
└── build
    └── main.go

$ cat $GOPATH/src/build/main.go
package main

    import (
        "go/ast"
        "go/build"
        "go/importer"
        "go/parser"
        "go/token"
        "go/types"
        "os"
        "path"
    )

    func panicOnErr(err error) {
        if err != nil {
            panic(err.Error())
        }
    }

    func main() {
        gopath := os.Getenv("GOPATH")   
        dir := path.Join(gopath, "src", "a")

        //  println("dir: " + dir)
        fset := token.NewFileSet()
        buildPkg, err := build.ImportDir(dir, build.ImportMode(0))

        panicOnErr(err)

        astFiles := []*ast.File{}

        for _, filename := range buildPkg.GoFiles {
            file, err := parser.ParseFile(fset, path.Join(dir, filename), nil, parser.AllErrors)
            panicOnErr(err)
            astFiles = append(astFiles, file)
        }

        for _, filename := range buildPkg.CgoFiles {
            file, err := parser.ParseFile(fset, path.Join(dir, filename), nil, parser.AllErrors)
            panicOnErr(err)
            astFiles = append(astFiles, file)
        }

        typesInfo := &types.Info{
            Types: make(map[ast.Expr]types.TypeAndValue),
            Defs:  make(map[*ast.Ident]types.Object),
            Uses:  make(map[*ast.Ident]types.Object),
        }

        var conf types.Config
        conf.Importer = importer.Default()
        conf.IgnoreFuncBodies = true
        typesPkg, err := conf.Check(buildPkg.Name, fset, astFiles, typesInfo)

        panicOnErr(err)

        _ = typesPkg
    }
$ cat $GOPATH/src/a/a.go
    package a

    import "b"

    var foo = b.Foo
$ cat $GOPATH/src/a/vendor/b/b.go
    package b

    var Foo = "bar"

4 What did you expect to see?

Nothing (that's OK)

$ go run build/main.go

5 What did you see instead?

$ go env && go version && go run $GOPATH/src/build/main.go 
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/benny/Entwicklung/testdebug/gopath"
GORACE=""
GOROOT="/home/benny/bin/go"
GOTOOLDIR="/home/benny/bin/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
go version go1.6 linux/amd64
panic: a/a.go:3:8: could not import b (can't find import: a/vendor/b)

goroutine 1 [running]:
panic(0x653760, 0xc82000ade0)
    go/src/runtime/panic.go:464 +0x3e6
main.panicOnErr(0x7fb0a76aac58, 0xc82000fe00)
    build/main.go:16 +0x7e
main.main()
    build/main.go:56 +0x8bd
exit status 2

Further information

When installing the vendor package

$ go install $GOPATH/src/a/vendor/b 

before running

$ go run $GOPATH/src/build/main.go

It runs fine as expected. After removing the build

$ rm $GOPATH/pkg/linux_amd64/a/vendor/b.a

It complains again

$ go run $GOPATH/src/build/main.go
panic: a/a.go:3:8: could not import b (can't find import: a/vendor/b)

goroutine 1 [running]:
panic(0x653760, 0xc82000ade0)
    go/src/runtime/panic.go:464 +0x3e6
main.panicOnErr(0x7fb0a76aac58, 0xc82000fe00)
    build/main.go:16 +0x7e
main.main()
    build/main.go:56 +0x8bd
exit status 2

Probably related to #14215

Duplicate of #11415.

build liteide tools ...
../../../../.go/src/github.com/visualfc/gotools/types/types.go:12:2: cannot find package "go/importer" in any of:

../../../../.go/src/github.com/visualfc/gotools/astview/astview.go:12:2: cannot find package "go/types" in any of:

have no idea what to do. Help?

@Tectract This is issue is not the place for asking questions. If you have a new issue, please file one with a clear description of what's wrong. If you have a general question, please consult with one of the Go forums. Thanks.

hey I thought it was related. Problem solved by manually installing latest version of go.