The Gems & Warts of Go
Gems are the things we love, and warts are the things we don't. On today's episode, Kris is joined by the hosting panel of Ian, Matt, and Dylan and they are talking about the gems and warts of Go. From defer, to net/http, to vanity URLs, to modules, we cover around 30 topics! To prevent our listeners/viewers from returning an E_TOO_MANY_UNPOPS error, we didn't include the Unpopular Opinions segment (there are plenty throughout the episode). We hope you enjoy this tangent filled episode. Have a gem or wart you agree/disagree with or think we missed a few? Let us know on social media or in the comments!
Thank you so much for listening. Happy listening!
Notes & Links:
Thank you so much for listening. Happy listening!
Notes & Links:
- Chandler Carruth's CPPcon talk (from 40:44)
- Go x/tools/guru (from 43:36)
- Since deprecated, however this functionality is included in gopls.
- go/analysis (from 47:19)
- go/x/tools/cmd/eg (from 1:47:25)
Chapters:
Socials:
- (00:00) - Intro
- (00:31) - Introductions
- (05:07) - Gem#1: net/http
- (07:37) - Gem#2: defer (gem)
- (09:36) - PEBKAC (tangent)
- (11:36) - Gem#3: if err != nil (gem)
- (16:09) - Gem#4: testing included (gem)
- (19:13) - Gem#5: struct field tags (gem)
- (21:57) - Gem#6: reflect & unsafe (gem)
- (24:35) - Gem#7: sync/atomic (gem)
- (24:54) - Gem#8: io as composeable interfaces (gem)
- (25:32) - Gem#9: No inheritance (gem)
- (31:20) - Gem#10: Vanity URLs (gem)
- (34:33) - Gem#11: single for loop (gem)
- (37:08) - Gem#12: pprof (gem)
- (38:25) - Gem#13: security by default (gem)
- (40:01) - Gem#14: fast compiler times (gem)
- (41:16) - Gem#15: go/ast & go/* packages (gem)
- (42:05) - Gem#16: implicit interfaces (gem)
- (42:38) - Wart#1: implicit interfaces (wart)
- (48:37) - Wart#2: slice tricks (wart)
- (54:10) - Wart#3: lack of method overloads (wart)
- (56:57) - Wart#4: covariance for array parameters (wart)
- (59:38) - Wart#5: encoding/json marshalling unexported fields (wart)
- (01:01:27) - Wart#6: encoding/json marshalling errors (wart)
- (01:02:31) - Wart#7: single letter variable names (wart)
- (01:08:45) - Wart#8: iota (wart)
- (01:16:09) - Wart#9: map operations (wart)
- (01:18:23) - Gem#17: structs as map keys (gem)
- (01:20:04) - Wart#10: main function signature (wart)
- (01:23:35) - Gem/Wart#1: channels (gem & wart)
- (01:30:38) - Wart#11: range loop variables (wart)
- (01:34:31) - Wart#12: no standard build system (wart)
- (01:38:09) - Wart#13: modules (wart)
- (01:53:18) - Outro
Socials:
Creators and Guests
Host
Matthew Sanabria
Matthew is an engineering leader focused on building reliable, scalable, and observable systems. Matthew is known for using his breadth and depth of experience to add value in minimal context situations and help great people become great engineers through mentoring. Matthew serves the Go community as a member of GoBridge. In his spare time, Matthew spends time with his family, helps grow his wife's chocolate business, works on home improvement projects, and reads technical resources to learn and tinker.