Modules
A Guide to Upgrading Your Library to a Major Release in Go
Practical walkthrough of bumping a Go module to v2+: import paths, branches, tags, and what not to forget.
Bumping a Go library to a new major version is not just a git tag v2.0.0. Go’s Semantic Import Versioning makes the module path itself part of the version contract — so v2+ means rewriting go.mod, every internal import, and (often) reorganizing branches. This is the short, command-driven version of the official guide, with the operational steps that are easy to forget.
Go Project Structure: Patterns That Scale
Practical guide to structuring Go projects from flat layouts to hexagonal architecture, with examples for CLIs, APIs, and monorepos
Go doesn’t enforce a project layout. That freedom is powerful but requires discipline — start simple and let structure emerge as complexity grows.
Using Go Modules Hosted in a Private GitLab Repository
Configure Go, GitLab CI job tokens, and .netrc to seamlessly consume private Go modules from internal GitLab repositories
When your Go project depends on an internal library living in a private GitLab repository, a plain go get will fail — GitLab doesn’t know who is asking, and Go doesn’t know the repository is private. Fortunately, a handful of configuration steps sorts everything out, both locally and in CI.
A curated list of Go libraries I use or plan to evaluate — covering resilience, web, SQL, concurrency, terminal UIs, testing, and more
A running list of Go modules I use or want to keep on my radar. Some I reach for daily, others I’m still evaluating. The Go ecosystem moves fast, so this post will keep evolving — treat it as a snapshot, not a manifesto.