Five Go Gotchas I Learned the Hard Way

By Jordan H. Ferenz

Elevator Pitch

Every system has its own gotchas - unexpected, usually disconcerting challenges. The Go programming language is not any different. In this talk, we will review five such gotchas which unsettled the speaker and caused a WAT reaction.


Go introduces interesting concepts, some might be new to developers coming from other languages. In this talk, we will discuss, and demonstrate with live coding, five gotchas related to dependency management, code design (functions of uninitiated structures), channels, panic handling, and type overloading and assertion. All these gotchas have caused “unexpected” behavior to the speaker at different occasions, and a WAT reaction once realizing why the code didn’t act as expected.


Currently, I’m a software developer at Aqua Security, developing mainly in Go. For over a decade, I have designed and developed several cloud-native security and data-intensive systems on large scales in both lean and agile environments, most recently at Trusteer (an IBM company). I am very keen on designing systems that evolve with the technological and business shifts an organization goes through as it expands.

I prefer doing live coding when possible, it’s more engaging and interesting than plain slides. This talk is heavily based on live coding and demonstrating the gotchas on the stage with their solutions.

I’m an experienced public speaker on tech and web security at conferences (Last one was Microsoft’s Go Open Source), and academia (College of Management Academic Studies and Bar-Ilan University).