So I wanted to build a little game, and having happily worked in BASIC, C#, Javascript, C, Java, Python and Scala in the past, I thought maybe I'd take a modern, compiled language because drawing stuff with Javascript on a website is clunky and slow as fuck. I wanted to be able to google stuff easily, so no Scala, I also didn't want to have to deal with C# or Java classes or god forbid the whole unity game engine clustertruck, but still wanted something that could be compiled into a fast program for all platforms easily, which I'm too imcompetent to do with in Python.

Luckily, I found this really nice little 2D game engine for Golang that even supports compiling for Browsers and started tinkering right away. So first thing I notice, the program wont run or compile while a Library is imported but not called or when variables are declared but not used. So I go online and find the following: That error is here to force you to write better code

Alright. So since they refuse to add a compiler flag to ignore this stuff, I guess I will comment / uncomment the library imports a couple times during my experiments using the underscore character. Why not. I guess it's clever because it forces people to keep their code files short because they have to scroll back to the top a bunch. It also makes the language completely unbearable for newbies, but whatever.

r := image.Rect(sx, sy, sx+tileSize, sy+tileSize)
op.SourceRect = &r

What? One letter variable names? Really? But then it turns out this is normal because the language doesn't let you do this:

op.SourceRect = &(image.Rect(sx, sy, sx+tileSize, sy+tileSize))

ALSO it's by design/spec AGAIN

After calming down a little bit from my intial rage, I can see a pattern here. Many programmers will feel clever If they can chain a bunch of function calls together and do all the business logic in one line of code, which then comes around to bite whoever works on that code in the future. So I guess it kind of makes sense if you are masochistic enough.

But styleguides, linters and git pre-commit hooks exist, yet the golang people prefer to bake that stuff in with no way to turn it off, which limits the language's usefulness in many ways.