If you want to see an article about the shortcomings of some language discussed, write one.
There's a linter for this you can easily integrate into your build or CI. Personally, having worked at a place with that as a CI rule, I'm the opposite. I felt annoyed having to explicitly set things I purposely didn't set. So I think it living as an optional linter is probably the right place.
> I've found Golang's generics to be confusing and unexpressive.
Same. Also with iterators.
If empty values are biting you, you need constructors.
There's definitely multiple ways to go about struct initialization, and Go had firmly chosen one approach. Best practice is to make the zero value of a field "useful", and to write a constructor function if you need it populated with any sort of conditional values.
On the other hand, I find the syntax to be relatively simple and non-concurrent code to be straightforward and unsurprising.