We Need To Talk About The Bad Sides of Go

This page summarizes the projects mentioned and recommended in the original post on /r/programming

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • bevy_snake

    Clone of the snake game, with Bevy

  • I don't quite know about that. Rust has lots of features that make it possible to write code that's nearly impossible to read with human eyes, code which REQUIRES the use of additional tools to understand. For example, you can define implementations for things which implement traits IMPLICITLY, essentially giving things methods that they don't define in their own implementation. Figuring where the hell the implementation is, even with Rustdoc, can be a HUGE pain, since the definition of the thing doesn't contain its entire implementation. For example, the bevy game engine in rust (e.g. where does the method 'snake_eating.after' get defined and what does it do here?: https://mbuffett.com/posts/bevy-snake-tutorial/)

  • golangci-lint

    Fast linters Runner for Go

  • I have this love/hate relationship with Go. On one hand it's easy to become productive with it relatively fast and syntax looks familiar (however my first reaction was "this looks like C syntax got stroke") and is very comfy for solving certain class of problems (micro services, interacting with OS/Docker containers etc. ). On the other hand the more I use it the more I get frustrated with it. Error handling can be very tedious at times (i.e Rob Pike reinvented monads to make error handling less verbose, and I'm missing ? operator from Rust) , same with interacting with DB (it is just tiring writing boilerplate for setting up/rolling back transactions while in python this would be handled by slapping decorator on my function) and tooling can be hit and miss (golangci-lint is still fighting with generics support or that due to fact that golangci-lint is just aggregator/wrapper over individual linters stuff might get disabled/deprecated unexpectedly between releases because of performance or because maintainer abandoned project).

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • bevy

    A refreshingly simple data-driven game engine built in Rust

  • I'm mentioning this example of confusion in the bevy engine: https://github.com/bevyengine/bevy/discussions/1137

  • life

    Game of life in sdl (by sotolf2)

  • Just as a small example, here is an sdl2 game of life thing that I made not so long ago: https://github.com/sotolf2/life/blob/main/life.nim so that you can get a little feel of the language, it might not be your cup of tea, but for me at least it just works very much how I think which is nice, flexible syntax and a really nice type system, nim is kind of like an anti-go :p Just negate most of the things go does and you have nim :p It's even cooler now when version 2 soon comes out where they got rid of the standard garbage collector, and use ORC instead, which at compiletime inserts allocs and frees, and only Reference count stuff that it detects as cycles, It's really cool, and really makes it come very close to C performance in most cases :)

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts