====== Installation ======
apt-get install golang-go gocode golang-golang-x-tools golint
===== manual update to latest versuion =====
sudo go get -u github.com/nsf/gocode
sudo go get -u github.com/rogpeppe/godef
sudo go get -u golang.org/x/tools/cmd/guru
====== GOPATH ======
* **GOROOT** is the location where Go package is installed on your system. In Debian it is **/usr/lib/go-1.10**
* **GOPATH** is the location of your work directory. For example my project directory is ~/Projects/Proj1.
* GO works with packages, GOPATH tells where to look for packages
* All packages installed with **go get** goes to GOPATH.
* Multiple projects (workspaces)has to be kept under different GOPATH
* Looks strange but as a benefit: This let us to have all external packages in required version
* all binaries will be stored in **$GOPATH/bin**
Single GOPATH:
You can have multiple projects in a single GOPATH. Each project will have a main.go in a different package.
Often this is the right way to go. All the projects will share the same dependencies, when you
upgrade a library each project will be updated. This works well when all the projects are updated and
deployed together (like micro services).
GOPATH directory structure:
* src
* bin
* pkg
===== example =====
Example setup of GOPATH:
Edit ~/.bashrc to add the following line:
export GOPATH=$HOME/go
re-login to apply changes.
===== use setpath tool =====
[[https://github.com/poorva29/setpath|setpath]]
Download: [[https://s3.ap-south-1.amazonaws.com/gosetpath/setpath_linux_64]]
cd ~/project/src
setpath go get github.com/golang/example/hello
**setpath** will automatically set GOPATH to correct path, even if executed deeply inside **~/project** subdirs.
====== dependencies ======
To download **dep** command:
setpath go get -u github.com/golang/dep/cmd/dep
**dep** reads two files called **Gopkg.toml** and the **Gopkg.lock**
Commands:
init Set up a new Go project, or migrate an existing one
status Report the status of the project's dependencies
ensure Ensure a dependency is safely vendored in the project
version Show the dep version information
check Check if imports, Gopkg.toml, and Gopkg.lock are in sync
cd ~/project/src/github.com/muka/go-bluetooth
setpath ${GOPATH}/bin/dep ensure
and new packages will be downloaded to ~/project/src/github.com/muka/go-bluetooth**/vendor**
More here: [[https://medium.freecodecamp.org/an-intro-to-dep-how-to-manage-your-golang-project-dependencies-7b07d84e7ba5]]
====== Eclipse IDE ======
[[https://goclipse.github.io/|GoClipse]] plugin for Eclipse. Installation: [[https://github.com/GoClipse/goclipse/blob/latest/documentation/Installation.md#installation|GoClipse installation]]
go get github.com/rogpeppe/godef
go get golang.org/x/tools/cmd/guru
Configure GO plugin:
* Preferences-->Go-->Tools and setup executables:
* /usr/bin/gocode
* /home/user/go/bin/guru
* /home/user/go/bin/godef
* /usr/bin/gofmt
* Preferences-->Go
* Go installation: Directory /usr
===== GOROOT is not defined =====
===== Issues =====
panic: Can't find the package clause
Probably gocode version mismatch:
* try to update from github
* killall gocode