added draft of go mod edit replace how-to

master
Adam Veldhousen 4 years ago
parent b7a65c45d7
commit 6dacfeb512
Signed by: adam
GPG Key ID: 6DB29003C6DD1E4B

@ -0,0 +1,57 @@
---
title: "Go Modules: How to replace a dependency with a local copy"
date: 2020-03-20T20:35:25Z
draft: false
tags: [golang, modules]
---
Lets say you're working on a go package and you need to replace a dependency with a specific version for testing. You can use the awesome `go mod edit -replace old=new[@version]` command to do this.
This command adds a `replace` directive to your `go.mod` that overrides any require statement versions for the matching module:
```bash {hl_lines=[13]}
$ go mod edit -replace github.com/gobuffalo/packr=github.com/gobuffalo/packr@v2.8.0
$ cat go.mod
module github.com/adamveld12/riffraff
go 1.14
require (
github.com/gobuffalo/packr v1.30.1
github.com/golangci/golangci-lint v1.21.0 // indirect
github.com/satori/go.uuid v1.2.0
)
replace github.com/gobuffalo/packr => github.com/gobuffalo/packr v2.8.0 # now points at a different version
```
Now when you build your go app, it will use `v2.8.0` of packr in place of the version specified in the `require` block.
But what if you want to use it similarly to `npm link`, where you want to replace a module with a local working copy?
Run the same command but omit the `@version` on the new package like so:
```bash {hl_lines=[16]}
# clone your own copy and make some edits at ~/projects/packr
$ cd ~/projects && git clone https://github.com/gobuffalo/packr
$ cd ~/projects/riffraff && go mod edit -replace github.com/gobuffalo/packr=../packr
$ cat go.mod
module github.com/adamveld12/riffraff
go 1.14
require (
github.com/gobuffalo/packr v1.30.1
github.com/golangci/golangci-lint v1.21.0 // indirect
github.com/satori/go.uuid v1.2.0
)
replace github.com/gobuffalo/packr => ../packr #now points at your local copy
```
When you're all finished up you can remove the `replace` directive with the following command:
```bash
$ go mod edit -dropreplace github.com/gobuffalo/packr
```
Loading…
Cancel
Save