Here is a reading list of blog posts about Go. It aspires to include only the most useful and relevant material that anyone writing Go should eventually read. By definition, the list is a work in progress.
Rather than being comprehensive, the list is a curated selection fixed at 200 entries.
Go is growing fast and so are the number of blog posts about it. If an interested reader knows of a great post not in this list, please open a pull request. Include your suggestion of what to add and what to remove to keep the list at its fixed length.
- Why should you learn Go?
- How to Write Go Code
- A Tour of Go
- Frequently Asked Questions
- Go Koans
- Go by Example
- Go Bootcamp
- Slice Tricks
- 6 Tips for Using Strings in Go
- Understand Go pointers in less than 800 words or your money back | Dave Cheney
- Golang channels tutorial | Alexander Guz's blog
- (Now You're) Thinking With Channels
- Channel Axioms | Dave Cheney
- Go Defer Simplified with Practical Visuals
- Understanding Go panic output
- How to avoid Go gotchas · divan's blog
- Common Gotchas in Go
- 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs
- Unofficial Go FAQ
- Effective Go
- Visualizing Concurrency in Go
- Strings, bytes, runes and characters in Go - The Go Blog
- Arrays, slices (and strings): The mechanics of 'append' - The Go Blog
- Code Review Comments
- command center: Less is exponentially more
- Go Proverbs
- Idiomatic Go
- Errors
- When Should I Use One Liner if...else Statements in Go?
- Go's Error Handling is Elegant
- Effective error handling in Go. - Morsing's blog
- Alternative Patterns for Method Overloading in Go
- Five Suggestions for Setting up a Go project
- Structuring Tests in Go
- Organizing Go Code
- The anatomy of a Go project - darian.af
- Structuring Applications in Go
- Style guideline for Go packages · Go, the unwritten parts
- time in go
- The empty struct
- For Range Semantics - GoingGo - Ardan Labs
- How I Learned To Quit Worrying And Love Go's Interfaces
- How to use interfaces in Go
- Creating My First Web Application with Go
- Making a RESTful JSON API in Go - The New Stack
- How to Serve Static Files with Golang
- An Intro To Templates in Go - Contextual Encoding
- Elliot Chance - Working With JSON in Go
- Making concurrent HTTP requests in Go programming language - Jinchuriki
- Golang http handlers as middleware - @capotej
- A TCP Echo Server in Go (Golang) | Jim Lawless' Blog
- HTTP File Upload and Download with Go - zupzup
- Simple Golang HTTP Request Context Example · Paul Fortin
- Go and JSON - Eager Blog
- Writing HTTP Middleware in Go
- Learn Web Programming in Go by Examples
- Go best practices, six years in
- Aspects of a good Go library – Jack Lindamood – Medium
- Solid Go Design
- Go Object Oriented Design
- Go’s std net/http is all you need … right? – Dean Karn – Medium
- What “accept interfaces, return structs” means in Go
- How to Use Go Interfaces
- Golang: interface{}, type assertions and type switches
- Pitfalls of context values and how to avoid or mitigate them in Go
- Structuring Applications for Growth
- How to ship production-grade Go - O'Reilly Media
- Loose Coupling in Go lang | 8th Light
- Self-referential functions and the design of options
- Functional Options for Friendly APIs
- Object Oriented Inheritance in Go
- Concurrency Patterns: Golang
- Stopping goroutines #golang
- Ways to limit concurrent resource use - Pocket Gophers
- Make Ctrl+C cancel the context.Context – Mat Ryer – Medium
- Cancelling Multiple Goroutines
- How to correctly use context.Context in Go 1.7 – Medium
- Using contexts to avoid leaking goroutines · go bits
- Go Concurrency Patterns: Pipelines and cancellation - The Go Blog
- Tutorial: Synchronizing State with Mutexes in Go
- Context
- Context and Cancellation of goroutines - http://dahernan.github.io
- Dancing with Go's Mutexes
- GoRoutines, Channels, and Proper Exits - Rabarar's Blog
- Buffered channels in Go: Tips & Tricks
- Use sync.WaitGroup in Golang | Nan Xiao's Blog
- How to Block Forever in Go
- Mutex Profile
- Sane Concurrency with Go | Mozilla Services
- Goroutine Tracing
- Error handling patterns in Go
- Testing Web Apps in Go | Mark J. Berger
- An Introduction to Testing in Go | TutorialEdge.net
- 5 simple tips and tricks for writing unit tests in #golang
- 5 Advanced Testing Techniques in Go · Segment Blog
- The Cult of Go Test
- Interfaces and Composition for Effective Unit Testing in Golang
- Go Testing Technique: Testing JSON HTTP Requests — Medium
- Acceptance Testing Go Web Applications with Cookies
- Testing Your (HTTP) Handlers in Go
- Testing concurrent code in Golang - JS Blog
- Learn Go with tests
- Unit Testing Golang HTTP Middleware
- Lesser-Known Features of Go Test - Blog | Splice
- Exposing Go on the Internet
- The complete guide to Go net/http timeouts
- HTTP(S) Proxy in Golang in less than 100 lines of code
- Write a Kubernetes-ready service from zero step-by-step GopherAcademy
- How to not use an http-router in go
- How To Write Router Tests in Go — Tapjoy Engineering
- A brief intro of TCP keep-alive in Go’s HTTP implementation | Nan Xiao's Blog
- Build a Web Crawler in Go
- Your pprof is showing: IPv4 scans reveal exposed net/http/pprof endpoints:
- HTTP Request Contexts & Go · go, web, go
- Using Object-Oriented Web Servers in Go - via @codeship | via @codeship
- Handle HTTP Request Errors in Go @ Alex Pliautau's Blog
- Go json.Decoder Considered Harmful
- Building High Performance APIs In Go Using gRPC And Protocol Buffers
- Implementing UDP vs TCP in Golang - Mina Andrawos
- Don't use Go's default HTTP client (in production)
- Writing an API Client in Go GopherAcademy
- Seeking around in an HTTP object GopherAcademy
- Using Functions Inside Go Templates - Calhoun.io
- Writing a Data Mapper in Go without an ORM
- Practical Persistence in Go: Organising Database Access
- Go tooling essentials · Go, the unwritten parts
- Profiling Go Programs - The Go Blog
- Go Tooling in Action — Google Cloud Platform — Community — Medium
- Using Go as a scripting language in Linux
- 10 things you (probably) don't know about Go
- Gopher Puzzlers
- Go gotcha: newbie or ninja?
- Advanced Go Tips And Tricks | Tit Petrič
- Golang slices gotcha · allegro.tech
- Diagnostics - The Go Programming Language
- Profiling Go
- Understanding Go Lang Memory Usage
- Five things that make Go fast
- Logging, interfaces, and allocation · Don't Panic
- Practical Go Benchmarks
- Golang: pass by pointer vs pass by value
- There is no pass-by-reference in Go | Dave Cheney
- Variadic functions in Go
- Crossing Streams: a Love Letter to io.Reader
- Function Types in Go (golang)
- research!rsc: Go Data Structures
- Always Be Closing
- Don't defer Close() on writable files
- Examples For Using io.Pipe in Go - zupzup
- How to Use go:generate
- Writing worker queues, in Go
- Job Queues in Go - OpsDash
- Working with Files in Go | DevDungeon
- Reading files in Go — an overview
- Golang: Working with Gzip and Tar
- Go Walkthrough: bytes + strings packages
- Go's work-stealing scheduler · Go, the unwritten parts
- The Go scheduler - Morsing's blog
- Go Assembly by Example
- Address Alignments in Go
- Hacking the Scheduler
- The Go netpoller - Morsing's blog
- Anatomy of a function call in Go
- Scalable Go Scheduler Design Doc
- Scheduler Tracing in Go
- Manual Memory Management in Go
- unsafe.Pointer and system calls GopherAcademy
- Looking at your program’s structure in Go 1.7 · Paul Smith
- Managing Syscall Overhead with crypto/rand · Scott Mansfield
- Optimized abs() for int64 in Go
- Allocation Efficiency in High-Performance Go Services
- Handling 1 Million Requests per Minute with Go
- allegro.tech - Writing a very fast cache service with millions of entries in Go
- A Million WebSockets and Go – freeCodeCamp
- go-perfbook
- Allocation Efficiency in High-Performance Go Services · Segment Blog
- Golang's Real-time GC in Theory and Practice - Pusher Blog
- How to Optimize Garbage Collection in Go | Cockroach Labs
- Debugging a potential deadlock in Go
- Advanced Go Concurrency Patterns - The Go Blog
- Multiplexing Golang Channels to Maximize Throughput | The MongoDB Engineering Journal
- Golang lock-free values with atomic.Value
- Stateful locks in Go - Tit Petric
- Share Memory by Communicating
- Concurrency is not parallelism
- Go Concurrency Patterns: Context
- Go Concurrency Patterns: Timing out, moving on
- Concurrency, Goroutines and GOMAXPROCS
- Locking in crypto/rand