laurentsv.com
Summary of my issues with Go (golang) - Laurent's Silicon Valley Experience
- 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
8Go'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.
Goroutines lack safety guarantees and debugging tools
7Go'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.
Go lacks modern language features like generics, enums, and pattern matching
728% 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.
Using forks requires complicated workarounds
4Developers cannot easily use a forked version of a dependency while waiting for an upstream bug fix, creating friction in the development workflow.
Large binary sizes
4Go produces unexpectedly large binaries, which is a concern for deployment and distribution.
Go version pinning in go.mod forces unnecessary updates
4The 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.
Testing dependencies pollute go.mod
3Testing dependencies appear in go.mod alongside production dependencies, creating unwanted coupling and making dependency management harder to reason about.
Go playground and documentation lack syntax highlighting
2The 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.