# Go A [[Programming Languages|Programming Language]] by [[Google]] for [[Systems Programming]], with first-citizen [[Concurrency]] primitives using channels and [[Message passing]]. Based on [[Communicating Sequential Processes]]. > [!warning] [[ZK - 2g3a - golang Concurrency is not easy]] ## Tools A collection of static analysis tools for golang. Haven't tried them out, but I found them linked in the gfuzz.pdf article in [[PAPER - Understanding Real-World Concurrency Bugs in Go]] - [GitHub - dominikh/go-tools: Staticcheck - The advanced Go linter](https://github.com/dominikh/go-tools) - [GitHub - google/gops: A tool to list and diagnose Go processes currently running on your system](https://github.com/google/gops) which seems like a great tool. I have snippets to do the same thing: [[SNIPPET - golang - List goroutines and print mem usage]] ## Code - [[CODE - golang's channel datastructure - chan.go]] - [[CODE - golang's context data structure - context.go]] ## Data structures - [[goroutine]] - [[golang channels]] ## Paper This was a great paper that taught me so much, and really changed the way I approach golang now. It has taught me to be really careful. - [[PAPER - Understanding Real-World Concurrency Bugs in Go]] ## Books - [[BOOK - Cloud Native Go - Matthew A Titmus]] - [[BOOK - 100 Go Mistakes and How to Avoid Them - Teiva Harsanyi]] - [[BOOK - The Go Programming Language - Brian W Kernighan Alan Donovan]] - [[BOOK - Concurrency in Go - Katherine Cox-Buday]] ## Log [[2022-07-15]] I refactored most of the links below into [[ZK - 2g3a - golang Concurrency is not easy]]. [[2022-07-31]] A thread about [[Mat Ryer]]'s style of implementing [[HTTP]] servers in [[golang]]: [[2022-10-09]] Adding link to [[BOOK - 100 Go Mistakes and How to Avoid Them - Teiva Harsanyi]] ## Notes - [[My personal Go rules]]