Skip to content

Latest commit

 

History

History
232 lines (163 loc) · 21.8 KB

README.md

File metadata and controls

232 lines (163 loc) · 21.8 KB

Go from A to Z

A compilation of knowledge about the Go Programming Language

Table of contents

Official documentation

Books

  • The Go Programming Language: The Bible. [Alan A. A. Donovan and Brian W. Kernighan]
  • Network Programming with Go (No Starch Press): In depth analysis of how to properly handle http servers, TCP/UDP connections, client and server timeouts, networking error handling, telemetry, etc. [Adam Woodbeck]
  • Let's go: Hands-on/practical book to build Web applications in Go. [Alex Edwards]
  • Let's go further: Advanced patterns for building APIs and web applications in Go. Metrics, Authentication, JSON responses, DB operations, etc. [Alex Edwards]
  • Concurrency in Go (O'Reilly) [Katherine Cox-Buday]

Software engineering

Design patterns

Data structures

  • Go Data Structures: A description of the memory implementation of some basic types in Go: bytes, int, floats, structs, pointers, strings and slices. Furthermore, a description of the functions for data structure creation make and new. [Russ Cox]
  • Maps and memory leaks in Go: An article explaining the fact that maps can only grow (even after garbage collection) and how they can potentially increase the memory consumption of a program to dangerous levels. [Teiva Harsanyi]

Semantics

Composition

Analysis

Web development

HTTP Servers

TLS

  • Go HTTP servers with TLS: A guide on how to configure TLS authentication for both servers and clients. It is very understandable, easy to follow and provides extra resources and a detail description on how to create self-signed certificates for a testing environment. [Eli Bendersky]

Proxy servers

Authentication

Audio streaming

Monitoring

  • Collecting Prometheus metrics in Golang: A very detailed guide about collecting metrics with Go using Prometheus and finally displaying them in a dashboard with Grafana. [Gabriel Tanner]
  • Getting response status code with middleware: A StackOverflow thread on how to capture the status code of a response that has already been sent to a client with the help of the negroni library. [StackOverflow]
    • ResponseWriter in negroni: negroni's implementation of a ResponseWriter, which has additional very useful methods missing in the standard library.

REST API

Error handling

SSH

Tooling

Build

Debugging

  • go delve - The Golang Debugger: An introduction into how to use delve from the command line to debug programs and tests. The article has a very good table summary of important delve commands for debugging.

Testing

Documentation

Modules

  • Life of a Go module: How GOPROXY, checksum and in general the module handling system works. [Jay Conrod]

Databases

Concurrency

Channels

Contexts

  • Stdlib: context package documentation: The documentation of the standard library context package has a good and concise explanation on why to use contexts and how to use them properly.
  • How to use contexts in Go: Semantic and syntactic explanation on how to implement contexts in concurrent programs. [DigitalOcean's Go series]
  • Context and structs: Official Go blog article on properly handling contexts.

Go runtime scheduler

  • The Go scheduler: High-level description of the interplay of OS threads, goroutines and contexts. How blocking syscalls are handled. [Daniel Morsing]
  • The Go netpoller: How polling primitives of the underline OS are used by Go in order to not block every single thread with a blocking syscall while doing networking. [Daniel Morsing]
  • Go's work-stealing scheduler: Description of how the work-stealing algorithm of the Go runtime works [rakyll]
  • The Go runtime scheduler's clever way of dealing with system calls: More in-detail description of how syscalls are characterized into good and bad syscalls, and the good syscalls are wait upon by the sysmon goroutine [Chris Siebenmann]

Data races

Containers

Background processes ("daemons")

Misc (unclassified or difficult to classify)