go

it's go, not golang.

This page, for now, is mostly links to either Go code or articles about Go programming. As I go through them I will remove, comment, or categorize the links.

I’ve had decent luck with the Go subreddit on Reddit. I like it better than Stackoverflow.

Packages

Learning Go

Videos

I have a ton of Go-related videos saved in my Youtube account. Here are a few of my favorites.

Talks (mostly)

Programming

Testing

Articles / Blogs

Blogs

Compiling / Linking

Context

Database / Datastore / SQL

Errors

Guides

Interfaces

JSON / JSON Parsing

Linting / Code Analysis

Logging

Memory

Microservices / Web Development / HTTP

Modules / Release / Code Organization

Profiling / Performance

Project Layout

Testing

Uncategorized

Mostly a disorganized list of articles that I would like to read. I plan on organizing them over time. This is not an endorsement of the content of any of these articles.

Code

What you probably want is pkg.go.dev.
A simple categorization of Go package links I’ve collected.

Compiling / Linking / Cross Compiling

  • gopherjs - A compiler from Go to JavaScript for running Go code in a browser
  • gowut - Go Web UI Toolkit
  • xgo - Go CGO cross compiler

Config / Flags

  • cobra - A Commander for modern Go CLI interactions
  • ff - Flags-first package for configuration
  • viper - Go configuration with fangs

Database / Datastore

  • dbr - additions to Go’s database/sql for super fast performance and convenience
  • Ent - An entity framework for Go
  • go-pg - Golang ORM with focus on PostgreSQL features and performance
  • goose - database migration tool
  • gorm - The fantastic ORM library for Golang
  • migrate - Database migrations
  • pgx - PostgreSQL driver and toolkit
  • pq - Pure Go Postgres driver for database/sql
  • sql-migrate - SQL schema migration tool
  • sqlx - general purpose extensions to golang’s database/sql
  • tern - db migration tool

Development With Vim / Neovim

Documentation

Errors

  • Errwrap - library for wrapping and querying errors
  • errgroup - drop-in replacement for stdlib errgroup
  • errlog - Reduce debugging time while programming Go

Formatting

  • golines - formatter that fixes long lines

Goroutine Maintenance / Management

  • run - a universal mechanism to manage goroutine lifecycles
  • tomb - clean goroutine tracking and termination

Interpreters

JSON / JSON Parsing

  • easyjson - Fast JSON serializer
  • fastjson - Fast JSON parser and validator
  • gjson - Get JSON values quickly
  • go-json - Fast JSON encoder/decoder compatible with encoding/json
  • jsonparser - One of the fastest alternative JSON parser
  • json-to-go - converts JSON to a go struct
  • json-to-struct - a simple command-line tool for generating to struct definitions from JSON
  • ojg - JSON parser
  • simdjson - Parsing gigabytes of JSON per second

Linting / Code Analysis

  • errcheck - linter for unchecked errors
  • Go Linters
  • goanalyzer - improved go tool trace goroutine analysis
  • goda - Dependency Analysis toolkit
  • gogrep - Search for Go code using syntax trees
  • golangci-lint - fast linter runner for go
    • awesome go linters - from the golangci-lint site. Many of these are already built in to golangci-lint.
  • go-ruleguard - Define and run pattern-based custom linting rules
  • ls-lint - file and directory name linter
  • nolint - turn off linting for specific lines in your code
  • revive - ~6x faster, stricter, configurable, extensible, and beautiful drop-in replacement for golint

Load Testing

  • Goad - Goad is an AWS Lambda powered, highly distributed, load testing tool
  • Shibuya - Shibuya is a scheduler for load generator
  • Vegeta - Vegeta is a versatile HTTP load testing tool

Logging

  • onelog - dead simple, super fast, zero allocation and modular logger
  • logrus - structured, pluggable logging
  • zap - blazing fast, structured, leveled logging in Go.
  • zerolog - fast and simple logger dedicated to JSON output

Microservices / Web Development / HTTP

Modules / Release / Code Organization

  • gomajor - tool for helping upgrade the major version of a module
  • giredore - Giredore is an utility that does go-import redirects right
  • Go Releaser - Release Go projects as fast and easily as possible

Plugins

  • go-plugin - go plugins using grpc
  • Pie - a toolkit for creating plugins for Go applications

Pretty Printing

  • litter - pretty printer library
  • spew - implements a deep pretty printer
  • utter - implements a deep pretty printer

Profiling

  • fgprof - a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together
  • profile - simple profiling for Go

SCM / Git / GitHub

  • Gitbatch - manage your git repositories in one place
  • go-git - A highly extensible Git implementation in pure Go
  • go-github - client for GitHub API v3
  • lazygit - simple terminal UI for git commands

Templates / Templating

  • go-template - An automatic cross-compiling Go (golang) repository template using goreleaser and Github actions
  • templatecheck - Checking Go templates for validity

Testing / Mocking

  • copyist - Mocking your SQL database in Go tests has never been easier
  • dockertest - run your Go language integration tests against third party services
  • gnomock - test your code without writing mocks with ephemeral Docker containers
  • gotests - automatically generate Go test boilerplate from your source code
  • gotestsum - ‘go test’ output formatting
  • go-fuzz - randomized testing
  • go-junit-report
  • go2xunit
  • Moq - Interface mocking tool for go generate
  • Testify - A toolkit with common assertions and mocks that plays nicely with the standard library

Validation

  • govalidator - Package of validators and sanitizers for strings, numerics, slices and structs
  • ozzo-validation - An idiomatic Go validation package. Supports configurable and extensible validation rules (validators) using normal language constructs instead of error-prone struct tags. (NOTE: should review algorithm before using, may be O(n^2))
  • validator - Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving

Uncategorized

I have not had a chance to organize much of this. Just a dump of links.

  • Go Cloud - The Go Cloud Development Kit
  • nsq - NSQ is a realtime distributed messaging platform
  • Athens - Athens is a Server for Your Go Packages
  • traefik - modern HTTP reverse proxy and load balancer
  • Go Resilience - Go toolkit to increase the resilience of applications
  • Proteus - A simple tool for generating an application’s data access layer.
  • circuitbreaker - an easy way to use the Circuit Breaker pattern in a Go program.
  • watermelon - Watermelon is a tool for building infrastructure as code
  • go-trader - A financial exchange written in Go
  • httpretty - httpretty prints the HTTP requests of your Go programs pretty on your terminal screen
  • asynq - Go library for queueing tasks and processing them asynchronously with workers
  • Ratelimit Manager - Allows you to respect the ratelimits from different hosts across multiple containers, threads, or processes
  • dex - A federated OpenID Connect provider
  • typex - Filter and examine Go type structures, interfaces and their transitive dependencies and relationships
  • cron - a cron library for go
  • goneli - Implementation of the NELI leader election protocol for Go and Kafka
  • enum2go - enum defintions generator
  • fx - An application framework for Go
  • gold - Go local docs server, Go docs generator, and a Go code reader
  • vssh - Execute Commands Over SSH at Scale
  • msgp - MessagePack Code Generator
  • goweight - analyze/troubleshoot a go binary
  • compandauth - see accompanying article
  • scheduler - cron-like job scheduler
  • supermonkey - monkey patching
  • evio - Fast event-loop networking for Go
  • fuzzy - fuzzy string matching
  • strcase - Convert strings to snake_case, camelCase, PascalCase, kebab-case
  • gosec - Golang Security Checker (linter)
  • vfsgen - Takes an input http.FileSystem and generates Go code that statically implements it
  • gohalt - Go Throttler library
  • casbin - authorization library that supports access control models like ACL, RBAC, ABAC
  • buf - A new way of working with Protocol Buffers (more details)
  • bingo - CI Automating versioning of Go binaries in a nested, isolated Go modules
  • gistfs - A Go io/fs filesystem implementation for reading files in a Github gist
  • go-bindata - Turn data file into go code
  • depth - Visualize Go dependency trees
  • task - A task runner / simpler Make alternative written in Go
  • simplewire - Lightweight dependency injection framework for Go
  • go-resume - A resume tailoring tool
  • go-ruleguard - Define and run pattern-based custom linting rules
  • go-reflect - Zero-allocation reflection library
  • go-getter - download things from a string URL using a variety of protocols
  • language server protocol - Package protocol implements Language Server Protocol specification in Go
  • jsonrpc2 - Package jsonrpc2 an implementation of the JSON-RPC 2 specification for Go
  • pipeline - A library to help you create pipelines in Golang