# 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]]