My Honeymoon With Go Is Over
I first got into Go after gravitating around Node.js for a while and I have to say: It was a breath of fresh air. It fixed most of the issues I had with asynchronous code, and it did away with all the fluff, keeping the language simple. I loved it. I loved how simple and predictable it was. And I still do!
I’m just done pretending like it’s perfect. Since then I’ve explored a lot of
other things. I got into Deno. I got into Rust. I expanded my horizons. And
coming back to Go after that, just brought all of its quirks to the surface.
It’s not the perfect language that I was sold. It’s strongly typed… Except for
the cases where you can totally get around the type system. We don’t have Enums
because we have iota
… Except that makes it unnecessarily painful to deal
with. There’s plenty of opportunity for nil pointer exceptions, in fact, a lot
of code out there is susceptible to nil pointer exceptions, but those aren’t
checked because we made a pinky promise that if there’s no error present, the
pointer has to be valid… But the compiler doesn’t provide such guarantee.
I still really like Go though. I don’t want this to be a Go-bashing post. I feel very productive in Go, it has an amazing green thread runtime, the GC is pretty darn good and the async primitives are very nice to use. All-in-all it’s still a great language, one that I’ll keep using in the future. I’ve just taken off my pink-tinted glasses.