What does go install do?

Go

Go Problem Overview


The docs say nothing about what build vs install does

My expectation was that it's like make install; i.e. it takes the compiled stuff and puts in its final location (/usr/local/bin/my_new_toy or whatever) but it seems that it puts things in GOROOT/bin

Can I tell go to do a make install - i.e. put things elsewhere? Or do I just write a makefile (please tell me no)?

Go Solutions


Solution 1 - Go

go build vs go install:

> go build just compiles the executable file and moves it to the destination. > go install does a little bit more. It moves the executable file to > $GOPATH/bin and caches all non-main packages which are imported to > $GOPATH/pkg. The cache will be used during the next compilation provided the > source did not change yet.


A package tree after go build and go install:

.
├── bin
│   └── hello  # by go install
└── src 
    └── hello
        ├── hello  # by go build
        └── hello.go

More detailed information.

Solution 2 - Go

If you want binary files to go to a specific location, you can use the environment variable GOBIN :

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

Source : http://golang.org/cmd/go/#hdr-GOPATH_environment_variable

GOBIN=/usr/local/bin/ go install

If you want per-project bin/ directory then you can simply append your project path to GOPATH, however you must have your code under $project-path/src/ and go install will put all the binaries in $project-path/bin.

export GOPATH=/dir1:/dir2:/dir3

> If GOBIN is not set, binaries from /dir1/src end up in /dir1/bin, > binaries from /dir2/src end up in /dir2/bin, and so on (and binaries > from $GOROOT/src end up in $GOROOT/bin).

Source : https://groups.google.com/forum/#!topic/golang-nuts/-mN8R_Fx-7M

And you can also just use (thanks JimB):

go build -o /path/binary-name

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
Questionpm100View Question on Stackoverflow
Solution 1 - GoBenyamin JafariView Answer on Stackoverflow
Solution 2 - GoOneOfOneView Answer on Stackoverflow