
The Gems & Warts of Go
01/13/25 • 117 min
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:
- 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:
- (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
Hosts
- Kris Brandow - Host
- Ian Wester-Lopshire - Host
- Dylan Bourque - Host
- Matthew Sanabria - Host
Socials:
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:
- 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:
- (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
Hosts
- Kris Brandow - Host
- Ian Wester-Lopshire - Host
- Dylan Bourque - Host
- Matthew Sanabria - Host
Socials:
Previous Episode

War Stories
Our experiences are what make us the software people we are today. In this episode, Kris is joined by the hosting panel of Ian, Matt, and Dylan and they're talking war stories. You'll hear tales of coworker frustrations, our own hubris, and plenty of weird software bugs. To close the episode out, Dylan, Ian, and Kris provide some unpopular opinions! Let us know on social media if you think their opinions are unpopular as they seem to think they are!
Thank you so much for listening to our first episode. Happy listening!
- (00:00) - Introduction
- (00:43) - Talkin' Bout The Rain
- (01:39) - Dates, Times, and "Helpful" Platforms
- (14:17) - Y2K Flashback
- (16:20) - Non-Refreshing Refresh Tokens
- (21:53) - TCP, Locks, and Load Balancers
- (34:16) - tar != tar
- (39:52) - Bonus Story: Too Many Modules
- (43:58) - pprof to the rescue!
- (47:18) - netcat: the ultimate database backup tool
- (49:03) - The Perfect API (In Theory)
- (53:30) - Hubris and the ease of ETL
- (55:38) - Problems with Proactive Fixes
- (58:39) - Unpopular Opinions
- (59:00) - Dylan's Unpop
- (01:03:08) - Ian's Unpop
- (01:09:26) - Kris' Unpop
- (01:12:32) - Outro
Hosts
- Kris Brandow - Host
- Ian Wester-Lopshire - Host
- Dylan Bourque - Host
- Matthew Sanabria - Host
Socials:
Next Episode

Do We Think You Should Learn To Code?
For years we've been told that everyone needs to learn to code. As career software people, what are our thoughts on this? Should you learn to code? Is coding the right career for you? In this first episode of a two part series, the panel discusses how they learned to code, whether they think everyone should learn to code, and of course they offer up some unpopular opinions.
And if you're thinking, "I already know how to code", don't worry, this episode contains valuable advice for you as well.
As always thanks for tuning in and happy listening!
Notes & Links:
- Ben Eater's YouTube Channel (from 53:00)
- John Carmack's Fast Inverse Square Root (from 1:01:47)
- This is actually from Quake, not Doom.
- Change Interviews #581 It's Not Always DNS (from 1:04:15)
Chapters:
- (00:00) - Intro
- (01:33) - How're we doing?
- (04:41) - Why did we learn to code?
- (06:10) - Why Kris learned to code
- (07:44) - Why Ian learned to code
- (08:54) - Why Dylan learned to code
- (10:36) - Why Matthew learned to code
- (14:22) - Computer Assembly Not Required
- (16:51) - Tangent: Why Are USB-C Cables?
- (17:36) - Should you focus on a specific language?
- (22:45) - Do you want to solve problems?
- (24:53) - Coding & Woodworking
- (27:09) - Curiosity & Itches that need scratching
- (31:07) - What do we mean when we say "code"?
- (32:34) - You should learn Excel
- (39:35) - Coding Is Configuring Computers
- (43:32) - Discrete Math, Not Binary
- (47:03) - Learn the low level stuff... eventually
- (53:42) - The desire to learn
- (57:41) - Sidequest: Networking
- (01:05:52) - Learning Design & Being Load Bearing
- (01:12:10) - Continual Learning
- (01:14:33) - What of AI and Automation?
- (01:21:49) - Share What You Learn
- (01:24:24) - Should You Learn To Code?
- (01:24:57) - Teaser: Episode 5 - Is Coding The Career For You?
- (01:26:02) - Unpopular Opinions
- (01:26:08) - Matthew's Unpop
- (01:28:51) - Ian's Unpop
- (01:29:29) - Dylan's Unpop
- (01:33:52) - Kris' Unpop
- (01:36:50) - Tangent: Chopper?
- (01:37:27) - Outro
Hosts
- Kris Brandow - Host
- Ian Wester-Lopshire - Host
- Dylan Bourque - Host
- Matthew Sanabria - Host
Socials:
If you like this episode you’ll love
Episode Comments
Generate a badge
Get a badge for your website that links back to this episode
<a href="https://goodpods.com/podcasts/fallthrough-612944/the-gems-and-warts-of-go-81931230"> <img src="https://storage.googleapis.com/goodpods-images-bucket/badges/generic-badge-1.svg" alt="listen to the gems & warts of go on goodpods" style="width: 225px" /> </a>
Copy