- Error handling is onerous; I write a lot of functions where most of the lines are just checking for and returning `err`
- No anonymous structs, and it’s really awkward to define structs inline
- Dealing with collections is really verbose; I guess since generics dropped I could handle this in userland, but it’s not idiomatic
etc etc. No language is perfect!
I make heavy use of map[string]any vs structs. I also find the right balance of checking err vs just making it _
JS has also had a lot of its "mistakes" fixed since 1995. It does so in a backwards compatible way and it isn't always obvious how much progress has been made, but it has never been a static unchanging, "unfixed" language.
(Personally, I'd much rather work with JS on the backend than golang. Golang looks to me like a throwback to the 1970s that misses good language design ideas from the 1990s. I understand some of why it has become popular, but there's so much bad design in that language that upsets my nausea.)