---
layout: post.html
title:  "My Recommended Go Resources"
date:   2021-09-02
tags: Go Golang
summary: "I was recently asked by a collegue at work if there are any resource I recommend with getting familiar with Go. It turned into quite a list so I thought i'd share it with everyone (and hopefully keep updating it) in the hopes that others will find it useful."
---

I was recently asked by a collegue at work if there are any resource I recommend with getting familiar with Go. It turned into quite a list so I thought i'd share it with everyone (and hopefully keep updating it) in the hopes that others will find it useful.

## 📚 Books 

My favourite book for learning Go is - ✨ **[The Go Programming Language](https://www.gopl.io/)** ✨ by Alan A. A. Donovan & Brian W. Kernighan.
This was the book I used to pick Go up in the first place. If you already have previous programming experience it's quite a nice book to first read about the specifics of the go language then flip through as needed to the various topics (such as Goroutines) that you might not know about.


Some 🆓 books I've seen recommended:

* **[Go With The Domain](https://threedots.tech/go-with-the-domain/)** by [Three Dots Labs](https://threedots.tech/)
* **[Go Design Patterns](https://www.packtpub.com/product/go-design-patterns/9781786466204)** by Mario Castro Contreras  (Free with trial)

I've also got the following books but haven't yet had a chance to read any of them so can't comment on their usefulness _just yet_:

* **[Let's Go](https://lets-go.alexedwards.net/)** by Alex Edwards
* **[Let's Go Further](https://lets-go-further.alexedwards.net/)** by Alex Edwards
* **[Ultimate Go Notebook](https://education.ardanlabs.com/courses/ultimate-go-notebook)** by [Ardan Labs](https://education.ardanlabs.com/)

There's also **[Everyday Golang](https://openfaas.gumroad.com/l/everyday-golang)** by [Alex Ellis](https://www.alexellis.io/) which I haven't had a chance to pick up yet but if it's anything like Alex's other writing it'll be a great resource!

## 🧰 Tools and Libraries

In terms of useful resources, tools and libraries I use a lot:

* [The Go Playground](https://play.golang.org/) is a fantastic tool for learning and experimenting.
* [Fiber](https://gofiber.io/) - My favourite web server framework. Very similar to the Express framework available for NodeJS.
* [Viper](https://github.com/spf13/viper) - Config management (env vars, config files, cli flags).
* [Cobra](https://github.com/spf13/cobra) - Framework for building amazing CLI tools.
* [Afero](https://github.com/spf13/afero) - Filesystem framework (very useful for tests).
* [ZeroLog](https://github.com/rs/zerolog) - Very useful logging framework. Support log levels, metadata attributes and different log output styles.
* [GORM](https://gorm.io/) - ORM database library with official support for MySQL, PostgreSQL, SQLite and SQL Server.

## 🔗 Websites / Blog Posts

* [Awesome Go](https://awesome-go.com/) - List of all things Go.
* [Embedding Static Files in Golang](https://bhupesh-v.github.io/embedding-static-files-in-golang/) - Embedding static files into a Go binary.
* [Go Recipes](https://github.com/nikolaydubina/go-recipes) - a collection of handy Go commands you can run to help with things like module updates.
* [Multi-arch Dockerfile](https://gist.github.com/AverageMarcus/78fbcf45e72e09d9d5e75924f0db4573) - Example multi-stage Dockerfile for building tiny, multi-arch container images for Go applications.
* [Go Weekly Newsletter](https://golangweekly.com/) - A fantastic weekly newsletter on all things Go (RSS feed also available).
* [Writing Unit Tests](https://blog.alexellis.io/golang-writing-unit-tests/) - Writing Go unit tests.

## 🧑‍💻 Suggested by others

* [https://github.com/quii/learn-go-with-tests](https://github.com/quii/learn-go-with-tests) - Learn Go with TDD.
* [https://gobyexample.com/](https://gobyexample.com/) - Common program examples.
* [https://changelog.com/gotime](https://changelog.com/gotime) - Good podcast on the Go community.

If anyone has any other resources they recommend I'd love to hear about them and update this list. Please feel free to reach out to me on Twitter at [@Marcus_Noble_](https://twitter.com/Marcus_Noble_).