Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Golang: Installation directory error?

Tags:

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 
like image 990
Xwilly Avatar asked Jul 08 '13 10:07

Xwilly


People also ask

Where does Golang install?

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.

Where can I find Golang path?

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 .

Is go install deprecated?

go get 's ability to build and install commands is now deprecated, since that functionality is redundant with go install .


1 Answers

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

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.

like image 123
peterSO Avatar answered Sep 19 '22 13:09

peterSO