Go modules is the long-awaited dependency management solution for Golang. In this short blog post, we will explore how we can use it in your next project.

In order to use go modules, you should be using go 1.11.x Modules are an experimental opt-in feature in go 1.11 and are expected to be GA in 1.13.

Using it is very easy. As simple as creating your project outside $GOPATH.Using it inside $GOPATH requires you to do the following,

export GO111MODULE=on

So we can start off by creating our project outside $GOPATH. Let us create a directory,

mkdir hello

Now let’s write some code by creating a file hello.go. Our toy module here will have a single function

package hello

import "fmt"

func SayHello() {
    fmt.Println("Hello")
}

Now we can initialize this as a go module by doing the following

14:09:23 ▶ go mod init github.com/scriptonist/hello
go: creating new go.mod: module github.com/scriptonist/hello

That’s it! our module is ready. Now we’ll commit and push this to github for other people to use.

hello master L ✔ ✘-1
12:27:33 ▶ git add -A && git commit -m "First Commit" && git push origin master

Go modules works very closely with semantic versioning and there are some additional quirks, which we’ll see later. For now, we’ll push a 1.0.0 tag to GitHub.

hello master L ✔ ✔
11:05:03 ▶ git tag -a "v1.0.0" -m "My first version"
hello master L ✔ ✔
11:06:48 ▶ git push origin --tags

Now we’ll create a new project which has the module as a dependency.

I named the project as moduleuser and wrote the following code.

moduleuser master L …3 ✔
12:22:04 ▶ cat main.go
package main

import (
    "github.com/scriptonist/hello"
)

func main() {
    hello.SayHello()
}

Now we initialize this as go module and run the program.

moduleuser master L …1 ✘-1
12:09:58 ▶ go mod init moduleuser
go: creating new go.mod: module moduleuser
moduleuser master L …2 ✔
12:20:33 ▶ go run main.go
go: finding github.com/scriptonist/hello v1.0.0
Hello

As you can see go pulled down our module and used it in our project. This a very basic quick start, to using go modules in your project. There are a lot more quirks and features to it. Which we’ll visit in another post. Let me know if you have any questions about this topic in the comment section below 🙂

You can find more information about go modules in the following links.