When dealing with go modules, sometimes it’s handy to test some changes from a local repository instead of using the upstream one.
Now, go programs are typically relying only on the upstream packages. Take the module file of
openqa-mon as example:
module github.com/grisu48/openqa-mon go 1.11 require ( github.com/BurntSushi/toml v0.3.1 github.com/grisu48/gopenqa v0.3.3 github.com/streadway/amqp v1.0.0 )
When working on
openqa-mon, I have to often also work on gopenqa, my underlying go library for accessing openQA - with an intentional horrible name ;-)
Now, before pushing some testing changes online, I’d like to see if they are compatible with my current state in openqa-mon. This is where the
replace keyword comes in handy.
Instead of relying on the upstream version, you can redirect go to look in a local directory for a certain module. See the syntax of the replace keyword
replace github.com/somedude/someproject => /path/to/local/repository
And here is a concrete example of how I use it
module github.com/grisu48/openqa-mon go 1.11 require ( github.com/BurntSushi/toml v0.3.1 github.com/grisu48/gopenqa v0.4.1 github.com/streadway/amqp v1.0.0 ) replace github.com/grisu48/gopenqa => /home/phoenix/Software/gopenqa
Now instead of using the upstream version, the local repository get used and you can test/use your local changes. Cheers.