I've been reimplementing a tool that was done in nodejs before and ported it to golang.

I have to say that a lot of programming paradigms are different in golang, a few parts are annoying, and some parts are "getting there" with generics.

The most annoying part if you do a lot of parsing is the golang mandated rule of what is public and what is private in a package. If you want to parse lots of JSON into a struct, mess is on you, always have to implement a custom marshal/unmarshal for it.

If you always have to implement a custom JSON marshalling method, and abuse annotations for mapping upper/lowercase properties...why was the uppercase rule mandated in the first place?

I wish golang had gone for an export keyword instead. Structs would have been so much cleaner.

The second issue I have with golang is that struct properties (as all data types) aren't nullable except via pointers, which makes consuming JSON APIs a fustercluck to deal with some times. I wish there was a nullable string data type instead of having to use dozens of helper functions.

The last issue is lack of functional ideas (as of now) but they are coming. lo is a lodash inspired library that makes a lot of things easier. [1] I hope that a lot of these helpers will at some point be part of the core libraries, so that datatypes can be easily mapped, casted and filtered.

[1] https://github.com/samber/lo

If you do a lot of JSON parsing for unknown or large structs, you can use gjson: https://github.com/tidwall/gjson