Search code examples
windowsgovendorgopath

go ignoring vendor directory


Everything I read about the vendor directory gives me the understanding that if I have a directory:

$GOPATH/src/vendor

And put my dependencies in there (I am using godeps), when doing go run, go should check in that directory first.

If I run my code in a Docker image I have, this works fine. However now that I try to run the same code on my Windows machine, go simply ignores the vendor/ directory, and fails to find the dependencies.

What am I doing wrong?

main.go:7:2: cannot find package "gopkg.in/alecthomas/kingpin.v2" in any of:
        C:\Go\src\gopkg.in\alecthomas\kingpin.v2 (from $GOROOT)
        C:\Users\js\dev\my_project\rest\src\gopkg.in\alecthomas\kingpin.v2 (from $GOPATH)
        C:\Users\js\dev\go\src\gopkg.in\alecthomas\kingpin.v2

Is the output when I try to do:

go run main.go

A directory vendor/ exists in this directory.

go version go1.7 windows/amd64

The exact commands I run (in windows cmd.exe)

> cd C:\Users\js\dev\my_project\rest\
> set GOPATH=C:\Users\js\dev\my_project\rest\;c:\Users\js\dev\go

> cd src
> dir
...
2016-09-01  23:20             2 923 main.go
...
2016-09-03  01:27    <DIR>          vendor

> go run main.go

Solution

  • The reason this did not work is because you are not supposed to put any code directly into the $GOPATH/src/ directory.

    The solution is to put your project into a sub-directory like so:

    $GOPATH/src/app/*.go