I have the error:
go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH
I'm using go version 1.1 on OS X.
I can build & run but can't install packages.
My environment:
GOPATH=/Users/xwilly/Dropbox/go/project PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/go/bin:/Users/xwilly/Dropbox/go/project/bin
Project tree:
/Users/xwilly/Dropbox/go/project bin pkg src
I can build without error:
..:src xwilly$ go build test.go ..:src xwilly$ go install test.go go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH
Here is a simple example:
xwilly$ cat test.go package main import ( "fmt" ) func main() { fmt.Println("Bonjour") } xwilly$ go run test.go Bonjour xwilly$ go install test.go go install: no install location for directory /Users/xwilly/Dropbox/go/project/src/learning outside GOPATH
The package installs the Go distribution to /usr/local/go. The package should put the /usr/local/go/bin directory in your PATH environment variable. You may need to restart any open Terminal sessions for the change to take effect.
You can do so by running the go mod init command with the module name. The module's name is also its import path. In most cases, this will be the repository location where your source code will be kept, such as github.com/mymodule .
go get 's ability to build and install commands is now deprecated, since that functionality is redundant with go install .
Command go
GOPATH environment variable
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 ofpkg
(pkg/GOOS_GOARCH
).If
DIR
is a directory listed in theGOPATH
, 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 inDIR/src/foo/quux
is installed into DIR/bin/quux, notDIR/bin/foo/quux
. Thefoo/
is stripped so that you can addDIR/bin
to yourPATH
to get at the installed commands. If theGOBIN
environment variable is set, commands are installed to the directory it names instead ofDIR/bin
.Here's an example directory layout:
GOPATH=/home/user/gocode /home/user/gocode/ 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)
Your directory structure is wrong. You are trying to install a command (package main
). It should be in a source directory named after your command. See the quux
command above.
In your case, assume your command is going to be named billy
.
$ mkdir -p /Users/xwilly/Dropbox/go/project/src/billy
which is inside your GOPATH
. Move your test.go
file to this directory. Run
$ go install billy
The command billy
should, unless you have set GOBIN
, be installed in the
/Users/xwilly/Dropbox/go/project/bin
directory inside your GOPATH
, which should be in your PATH
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With