How to install golang 3rd-party projects from download sources?
I'm trying to install mgo which is a mongo-driver written in golang.
The standard command:
go get launchpad.net/mgo
But it failed because of some cert issues.
So I manually download the sources of mgo to local E:\mgo
, but I don't know to how install it.
The file tree:
├─.bzr
│ ├─branch
│ │ └─lock
│ ├─branch-lock
│ ├─checkout
│ │ └─lock
│ └─repository
│ ├─indices
│ ├─lock
│ ├─obsolete_packs
│ ├─packs
│ └─upload
├─bson
└─testdb
I tried:
cd mgo
go install
It reports:
auth.go:34:2: import "launchpad.net/mgo/bson": cannot find package
But if I try to install bson first:
cd bson
go install
It reports another error:
go install: no install location for _/E_/mgo/bson
So, what's the correct command to install it?
Finally I successfully install the mgo project. I think it will be helpful for beginners, so I answer it here.
First, we need GOPATH
Define a env variable GOPATH
, which is your project root directory, and it should have a sub dir src
.
For me, I define it to E:\WORKSPACE_GO\mgo
, then create a sub dir src
Copy the project to the src
Then copy the mgo
project to %GOPATH%/mgo
, but we must be careful about the directory structure. It should be exactly the same as the package defined in sources.
For mgo
, it's package is launchpad.net/mgo
, so the structure should be:
E:\WORKSPACE_GO\mgo\src\launchpad.net\mgo
go install
At last, go install
them:
cd E:\WORKSPACE_GO\mgo\src\launchpad.net\mgo\bson
go install
cd ..
go install
If there is no error input, it should be successfully installed.
Set GOPATH. Move code under $GOPATH
. Then
cd $GOPATH/src/github.com/user/package
go get .
Explanation:
go build . # produces binary in current dir
go install . # produces binary in $GOPATH/bin
go get . # same as 'install' but resolves import deps
More on that
You will have to put it into your GOPATH/src
directory, preserving the import path (the one you passed to go install
).
The fallback GOPATH is your go install directory. So you can clone the mgo repository to go/src/pkg/launchpad.net/mgo
.
Alternatively, when you set up a project directory/environment for your project that depends on mgo, and set the GOPATH
environment variable to that FOLDER, then you can clone the mgo repository to FOLDER/src/launchpad.net/mgo/
.
You can then use the mgo package in your project as expected:
import "launchpad.net/mgo"