Go install fails with error: no install location for directory xxx outside GOPATH

MacosGo

Macos Problem Overview


~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1\
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH

No matter what structure the project is in this always fails with the same message. Go build works perfectly.

Here is my go env

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"

This is on Mac OSX Mountain Lion and go was installed with homebrew.

Macos Solutions


Solution 1 - Macos

For any OS X users and future me, you also need to set GOBIN to avoid this confusing message on install and go get

mkdir bin 
export GOBIN=$GOPATH/bin

Solution 2 - Macos

When you provide no arguments to go install, it defaults to attempting to install the package in the current directory. The error message is telling you that it cannot do that, because the current directory isn't part of your $GOPATH.

You can either:

  • Define $GOPATH to your $HOME (export GOPATH=$HOME).
  • Move your source to within the current $GOPATH (mv ~/src/go-statsd-client /User/me/gopath).

After either, going into the go-statsd-client directory and typing go install will work, and so will typing go install go-statsd-client from anywhere in the filesystem. The built binaries will go into $GOPATH/bin.

As an unrelated suggestion, you probably want to namespace your package with a domain name, to avoid name clashing (e.g. github.com/you/go-statsd-client, if that's where you hold your source code).

Solution 3 - Macos

You are using go install on a directory outside the GOPATH folder. Set your GOBIN env variable, or move src folder inside GOPATH.

GOPATH/
     bin/
     src/
       go-statsd-client/

More info: GO BUILD Source code, line 296

Solution 4 - Macos

You need to setup both GOPATH and GOBIN. Make sure you have done the following (please replace ~/go with your preferred GOPATH and subsequently change GOBIN). This is tested on Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

The selected answer did not solve the problem for me.

Solution 5 - Macos

You'll want to have 3 directories inside your chosen GOPATH directory.

GOPATH
     /bin
     /src
       /someProgram
        program.go
       /someLibrary
        library.go
     /pkg

Then you'll run go install from inside either someProgram (which puts an executable in bin) or someLibrary (which puts a library in pkg).

Solution 6 - Macos

I had this problem on Windows.

My problem was that my %GOPATH% environment variable was set to

C:\Users\john\src\goworkspace

instead of

C:\Users\john\src\goworkspace\

Adding the missing trailing slash at the end fixed it for me.

Solution 7 - Macos

For what it's worth, here's my .bash_profile, that works well for me on a mac with Atom, after installing go with Homebrew:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

Solution 8 - Macos

In my case (OS X) it was because I have set GOPATH to /home/username/go (as per the book) instead of /Users/username/go

Solution 9 - Macos

I'm on Windows, and I got it by giving command go help gopath to cmd, and read the bold text in the instruction,

that is if code you wnat to install is at ..BaseDir...\SomeProject\src\basic\set, the GOPATH should not be the same location as code, it should be just Base Project DIR: ..BaseDir...\SomeProject.

> The GOPATH environment variable lists places to look for Go code. On > Unix, the value is a colon-separated string. On Windows, the value is > a semicolon-separated string. On Plan 9, the value is a list. > > If the environment variable is unset, GOPATH defaults to a > subdirectory named "go" in the user's home directory ($HOME/go on > Unix, %USERPROFILE%\go on Windows), unless that directory holds a Go > distribution. Run "go env GOPATH" to see the current GOPATH. > > See https://golang.org/wiki/SettingGOPATH to set a custom GOPATH. > > Each directory listed in GOPATH must have a prescribed structure: > > The src directory holds source code. The path below src determines the > import path or executable name. > > The pkg directory holds installed package objects. As in the Go tree, > each target operating system and architecture pair has its own > subdirectory of pkg (pkg/GOOS_GOARCH). > > If DIR is a directory listed in the GOPATH, a package with source in > DIR/src/foo/bar can be imported as "foo/bar" and has its compiled form > installed to "DIR/pkg/GOOS_GOARCH/foo/bar.a". > > The bin directory holds compiled commands. Each command is named for > its source directory, but only the final element, not the entire path. > That is, the command with source in DIR/src/foo/quux is installed into > DIR/bin/quux, not DIR/bin/foo/quux. The "foo/" prefix is stripped so > that you can add DIR/bin to your PATH to get at the installed > commands. If the GOBIN environment variable is set, commands are > installed to the directory it names instead of DIR/bin. GOBIN must be > an absolute path. > > Here's an example directory layout: > > GOPATH=/home/user/go > > /home/user/go/ > 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) > ..........

if GOPATH has been set to Base Project DIR and still has this problem, in windows you can try to set GOBIN as Base Project DIR\bin or %GOPATH%\bin.

Solution 10 - Macos

Careful when running

export GOPATH=$HOME

Go assume that your code exists in specific places related to GOPATH. So, instead, you can use docker to run any go command:

docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang

And now you can use any golang command, for example:

go test github.com/<organization name>/<repository name> 

Solution 11 - Macos

In windows, my cmd window was already open when I set the GOPATH environment variable. First I had to close the cmd and then reopen for it to become effective.

Solution 12 - Macos

On OSX Mojave 10.14, go is typically installed at /usr/local/go.

Hence, setup these ENVs and you should be good to go.

export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin

Also, add these to your bash_profile or zsh_profile if it works.

echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontgandrewsView Question on Stackoverflow
Solution 1 - MacosBenjamin WoottonView Answer on Stackoverflow
Solution 2 - MacosGustavo NiemeyerView Answer on Stackoverflow
Solution 3 - MacosAndrea Di PersioView Answer on Stackoverflow
Solution 4 - MacosZhenhuaView Answer on Stackoverflow
Solution 5 - MacosEarl ZeddView Answer on Stackoverflow
Solution 6 - MacoseckzaView Answer on Stackoverflow
Solution 7 - MacosJRunView Answer on Stackoverflow
Solution 8 - MacoscatamphetamineView Answer on Stackoverflow
Solution 9 - Macosyu yang JianView Answer on Stackoverflow
Solution 10 - MacosOmer Levi HevroniView Answer on Stackoverflow
Solution 11 - MacoslodeView Answer on Stackoverflow
Solution 12 - MacosA Null PointerView Answer on Stackoverflow