Comment by strix_varius

1 day ago

This article was a well-thought-out one from someone who has obviously really used Go to build real things.

I quite like Go and use it when I can. However, I wish there were something like Go, without these issues. It's worth talking about that. For instance, I think most of these critiques are fair but I would quibble with a few:

1. Error scope: yes, this causes code review to be more complex than it needs to be. It's a place for subtle, unnecessary bugs.

2. Two types of nil: yes, this is super confusing.

3. It's not portable: Go isn't as portable as C89, but it's pretty damn portable. It's plenty portable to write a general-purpose pre-built CLI tool in, for instance, which is about my bar for "pragmatic portability."

4. Append ownership & other slice weirdness: yes.

5. Unenforced `defer`: yes, similar to `err`, this introduces subtle bugs that can only be overcome via documentation, careful review, and boilerplate handling.

6. Exceptions on top of err returns: yes.

7. utf-8: Hasn't bitten me, but I don't know how valid this critique is or isn't.

8. Memory use: imo GC is a selling-point of the language, not a detriment.