One important thing to mention about Go packaging system is that it needs to have a proper folder structure within the GOPATH. This introduces a small problem when working with GitHub projects. We are used to forking a project, cloning our fork and start working before committing the pull-request to the original project. Wrong!
When you fork a project, you create a new repository on GitHub within your username. If you clone this repository and start working with it, all new import references in the project will point to your repository instead of the original! Imagine the following case in the original repository:
package main import "github.com/original/a_library" [some code]
Then, you make a fork and add a subfolder with a library called
a_library/my_library that you want to use from the main package. The result is going to be the following:
package main import ( "github.com/original/a_library" "github.com/myaccount/a_library/my_library" )
Now if you commit this line, the original repository that contains the code you have pushed will download this code anyways from your account again and it will use the references downloaded! Not the ones contained in the project!
So, the solution to this is simply to replace the
git clone command with a
go get pointing to the original library:
$ go get github.com/original/a_library $ cd $GOPATH/src/github.com/original/a_library $ git remote add my_origin https://github.com/myaccount/a_libbrary
With this modification, you can work normally in the original code without fear as the references will stay correct. Once you are done you just have to commit and push to your remote.
$ git push my_origin my_brach
This way, you can now access the GitHub web user interface and open the pull request without polluting the actual original code with references to your account.