Back

laurentsv.com

Summary of my issues with Go (golang) - Laurent's Silicon Valley Experience

12/21/2025Updated 3/5/2026
https://laurentsv.com/blog/2025/12/21/golang-gripes.html

- Having added a useless digit to the go line on go.mod. go line should have remained the language version not a specific patch level that everybody now needs to set to .0 anyway. - golang.org/x forcing cascading updates by bumping said go line even without any other change actually using the new features. Libraries shouldn’t force upgrades without benefits (which isn’t to say you shouldn’t use a stable/supported version to build final binaries) … adding it / making unnecessary changes. - Enums (or at least whitelisted go:generate for stringer and other trustworthy tool so one doesn’t need to commit to source control generated files) - Unions - goroutineid not exposed (and bad justification for that in the go faq, that reads like bad faith). It’s very useful for logging. - generics are half baked. having type switches is super ugly - improvements that are a bit silly like … ) or iterators instead of the above - size of binaries - go playground and go doc not doing basic syntax highlighting because some early go team member don’t like colors. - go doc preview improved and yet still not working - Need … ``` - Embedded struct init - Testing dependencies showing up in go.mod - A pain to to use a fork while waiting for a bug fix to get upstream - GOMEMLIMIT being so soft you can ask for 10x - ``` := ```

Related Pain Points8

Garbage collection causes unpredictable latency

8

Go's garbage collector is unpredictable and unsuitable for latency-sensitive environments like high-frequency trading or real-time analytics. GOMEMLIMIT is described as unreliable, allowing requests 10x over the limit.

performanceGo

Goroutines lack safety guarantees and debugging tools

7

Go's goroutines lack compile-time safety guarantees, leading to orphaned routines, race conditions, and deadlocks. Unlike Rust, Go offers no memory safety at compile time. Additionally, goroutineID is not exposed, making debugging and logging difficult.

performanceGo

Go lacks modern language features like generics, enums, and pattern matching

7

28% of developers want language features missing from Go that are available in other languages. Common requests include proper enums, union types, sum types, pattern matching, and nil pointer safety. Existing generics are criticized as half-baked.

compatibilityGo

Using forks requires complicated workarounds

4

Developers cannot easily use a forked version of a dependency while waiting for an upstream bug fix, creating friction in the development workflow.

dependencyGo

Large binary sizes

4

Go produces unexpectedly large binaries, which is a concern for deployment and distribution.

performanceGo

Go version pinning in go.mod forces unnecessary updates

4

The go line in go.mod includes patch-level versioning instead of just language version, forcing cascading updates when libraries bump the version without meaningful feature usage or benefit.

configGo

Testing dependencies pollute go.mod

3

Testing dependencies appear in go.mod alongside production dependencies, creating unwanted coupling and making dependency management harder to reason about.

configGo

Go playground and documentation lack syntax highlighting

2

The Go playground and go doc tools don't include basic syntax highlighting due to an early Go team member's design preference against colors, resulting in poor developer experience.

dxGo