This post is the start of a new series about Go.

Go is an awesome, simple, modern, fast programming language.

It’s compiled, open source, strongly typed.

It was created by Google engineers with these main goals:

• make their projects compile (and run) faster
• be simple so people can pick it up in little time
• be low level enough but also avoid some pitfalls of being too low level
• be portable (compiled Go programs are binaries that do not require other files to run and are cross-platform, so they can be distributed easily)
• be boring, stable, predictable, offer less opportunities to make mistakes
• make it easy to take advantage of multiprocessor systems

and it was meant to be a replacement for C and C++.

Also, it was built to work along with C and C++ codebases, thanks to its C interoperability features.

Go can be used for many different needs, and it can solve both simple needs and very complex ones.

You can create command line utilities, networking servers, and it is widely used in many different scenarios.

Docker and Kubernetes are written in Go.

My favorite Static Site Generator (Hugo) is written in Go.

Caddy, a quite popular web server, is written in Go.

There’s lots of different widely used tools that use this programming language under the hood.

This handbook will introduce you to this language.

Here are a few things you should know before we dive into the specifics of the language.

First, https://go.dev is the homepage of the language. This will be your go-to resource to:

Run the installer, and at the end of the process you will have the go command available in your terminal:

Open the terminal and run go version and you should see something like this:

NOTE: you might have to open a new terminal before you can run the program, as the installer added the Go binaries folder to the path.

The exact location of the Go installation files will depend on your Operating System.

On macOS it’s under /usr/local/go, with binaries in /usr/local/go/bin.

On Windows it will be under C:\Program Files\go.

The Windows and Mac installers will set the Go binaries path automatically.

On a Mac you might also want to install Go via Homebrew using brew install golang. This will make it easier to update later.

On Linux you will have to add the Go binaries folder to your terminal path before you can run the go command after unpackaging the Linux package to /usr/local/go with

echo 'export PATH=$PATH:/usr/local/go/bin' >>$HOME/.profile
source \$HOME/.profile


I recommend Visual Studio Code (aka VS Code) as your editor.

Read Go in Visual Studio Code for a quick “up and running” setup. At the bare miminum, install the Go extension.

This extension will make your life easier providing IntelliSense (syntax highlighting, autocompletion, on hover information, error highlighting…) and other things like auto formatting, menu options to install packages, testing, and more.

I recommend you enable in the VS Code Settings “Format on Save” and “Format on Paste”:

Comments in Go are done using the usual C / C++ / JavaScript / Java syntax:

// this is a line comment

/*
multi
line
comment
*/


The language has no semantically significant whitespace. Like C, C++, Rust, Java, JavaScript. Unlike Python, where whitespace is meaningful and is used to create blocks instead of curly brackets.

Semicolons are optional, like in JavaScript. Unlike C, C++, Rust or Java.

Go takes indentation and visual order very seriously.

When we install Go we also get access to the gofmt command line tool which we can use to format Go programs. VS Code uses that under the hood to format Go source files.

This is very interesting and innovative because formatting and issues like tabs vs spaces or “should I put the curly brackets on the same line of the loop definition or in the next line” are a huge waste of time.

The language creators defined the rules, everyone uses those.

This is great for projects with large teams.

In the next days I’ll introduce new Go concepts getting more and more into the language. Stay tuned.