Use a Local Version of a Library in Go
replace
keyword in the go.mod
file.
Set up Git Remotes
Start by cloning the library into the place in your GOPATH
that this library would usually live. In this example, I’m using the magicmonkey/go-streamdeck
library (lots more to write about this library so watch this space) so it lives at $GOPATH/src/github.com/magicmonkey/go-streamdeck
and is a clone of that main GitHub repo at https://github.com/magicmonkey/go-streamdeck.
Since I’m also contributing changes to this library, I forked the GitHub project and have my own copy (that I can commit to branches on) at https://github.com/lornajane/go-streamdeck. Grabbing the clone URL, I added this repo as another remote to the existing go-streamdeck
library:
git remote add lornajane [paste clone URL]
Pro-tip: git does not check this remote exists or that you can access it, it just believes you and stores the URL. Run git fetch lornajane
(or whatever you named your remote) to actually link with it.
Now the library is all set up, and I need to configure my own project to use the local version of the code, not look for the latest public release.
Configure Go.Mod to use Local Dependency
In the go.mod
file for the project that uses this library, the first few lines look like this:
module github.com/lornajane/streamdeck-tricks
go 1.14
replace github.com/magicmonkey/go-streamdeck => /home/lorna/go/src/github.com/magicmonkey/go-streamdeck
… then the usual require
block is below.
This setup means that changes I make on disk are reflected immediately in my project, I don’t even need to commit. For creating and testing patches to a library, it’s excellent and I have to look up the syntax every time so it’s here for fast(er) reference!
Edit: Completely failed to link this excellent post on using replace from Pam Selle which covers the same stuff but better.
Also published on Medium.