- root project import: is not within any gopath/src
- dep init is not within a known gopath
- root project import not in gopath
- dep is not within any gopath/src
- dep does not currently support using gopath/src as the project root
- dep is not within a known gopath
- is not within a known gopath/src
- golang project outside gopath
Above are some of the issues that can cause from the $GOPATH. So It's always better to understand what the hell is this $GOPATH and simply how it works.
If you have already installed golang, open up a terminal or cmd and type
> go env
go specific environment variables |
Then it will show all the available environment variables that needs for the golang. Our only focus is to understand this $GOPATH. simply $GOPATH is a environment variable.
- Is that it ?
- What is it for ?
Look at my $GOPATH. I have set it to the C:\Users\User\go-projects
Sooooo is that means the $GOPATH == working directory ?
Actually if you think like that and set it to your working space will solve the problem. But how ?
Lets look at how a go project structure looks like
my-go-project
|__src
|__pkg
|__bin
all the source code is manage by this src folder. Lets look at how the go lang source's src $GOROOT folder looks like
$GOROOT/src folder structure |
Simply it shows the folders that contains particular package's source code. for a example when we need the fmt API we access this $GOROOT/src path of fmt package and it's publicly exposed source.
So always the $GOROOT contains all the core packages. Ok then what about other packages. I mean 3rd party packages. Check this awesome go site
3rd party library import format of golang |
What if you have a 3rd party dependency from github.com. There can be other 3rd part libraries from gitlab.com, sourcegraph.com, golang.org, gopkg.in, etc...
- How the go try to find those dependency ?
- If not where and how go try to install those dependency ?
First it looks inside the $GOROOT/src (C:\Go\src)if that particular dependency is not there it goes to $GOPATH/src (C:\Users\User\go-projects\src) and looks weather it can finds it.
Once you make the > go get command it will install the dependencies to the $GOPATH/src folder.
So It's always a good practice to maintan your all go project paths inside the $GOPATH. create a root go-projects folder and make that folder path to $GOPATH. then you can manage your and other 3rd party project clearly. If you got any issues retaliated go dependency you know where to look at.
In this structure whenever you build your project or 3rd party project binary will goes to $GOPATH/bin pkg files related to src goes to $GOPATH/pkg
Basic golang src project structure |
This is how a github projects lives inside the $GOPATH. So keep your and 3rd party projects in one place. Use $GOPATH wisely.
Note you can have multiple $GOPATH.
Ubuntu: export GOPATH=path1:path2:path3...
Windows set GOPATH=path1;path2;path3
But I prefer 1 $GOPATH just one path to avoid the complexity.
Hope you guys understood #HappyCoding :)
No comments:
Post a Comment