The Go blog has always good insights and details around things like this: https://go.dev/blog/context