I am trying out Go modules. My project requires the libarary golang.org/x/net/html
, so I defined this go.mod
file:
module github.com/patrickbucher/prettyprint
require golang.org/x/net/html
And wrote this demo program to check if the dependency gets loaded upon compilation:
package main
import (
"fmt"
"log"
"os"
"golang.org/x/net/html"
)
func main() {
doc, err := html.Parse(os.Stdin)
if err != nil {
log.Fatal(err)
}
fmt.Println(doc)
}
When I run go build, I get this error message:
go: errors parsing go.mod:
~/prettyprint/go.mod:3: usage: require module/path v1.2.3
Obviously, I missed the version number. But which one to take? I stumbled an article called Takig Go Modules for a Spin, where I found an example of a go.mod
file containing references to golang.org/x
packages:
module github.com/davecheney/httpstat
require (
github.com/fatih/color v1.5.0
github.com/mattn/go-colorable v0.0.9
github.com/mattn/go-isatty v0.0.3
golang.org/x/net v0.0.0-20170922011244-0744d001aa84
golang.org/x/sys v0.0.0-20170922123423-429f518978ab
golang.org/x/text v0.0.0-20170915090833-1cbadb444a80
)
The author is using version strings like v0.0.0-20170922011244-0744d001aa84
, consisting of the semver indication v0.0.0, a timestamp and something that looks like a git commit ID.
How do I figure out those version strings? I guess those golang.org/x
packages will be versioned according to semantic versioning at some point, but to really trying out go mod
, I need to figure out those now.
Update
This command is the better solution to adding the replace
command to go.mod
rather than doing it manually using git
that I initially posted:
go mod edit -replace github.com/docker/docker=github.com/docker/engine@ea84732a7725
produces a similar result but instead of using a pseudo-version, it finds the tagged engine version.
replace github.com/docker/docker => github.com/docker/engine v17.12.0-ce-rc1.0.20191113042239-ea84732a7725+incompatible
Alternatively, include a tagged docker version.
go mod edit -replace github.com/docker/[email protected]=github.com/docker/engine@ea84732a7725
for
replace github.com/docker/docker v1.13.1 => github.com/docker/engine v17.12.0-ce-rc1.0.20191113042239-ea84732a7725+incompatible
Thanks to @Shivam010 on Medium
Original, deprecated answer
Here's how I did it.
Checkout the repository on the desired branch/tag. e.g.
git clone -b v19.03.5 [email protected]:docker/engine.git
Then
cd engine
TZ=UTC git --no-pager show \
--quiet \
--abbrev=12 \
--date='format-local:%Y%m%d%H%M%S' \
--format="%cd-%h"
And i get
20191113042239-ea84732a7725
For use in go.mod
as
replace github.com/docker/docker v1.13.1 => github.com/docker/engine v0.0.0-20191113042239-ea84732a7725