You can unmarshall a JSON document into a map (map[string]interface{}) or implement some interface and unserialize JSON &quot;by hand&quot; with a method.<p>Go type system is flat so it&#x27;s often hard to express something without being tempted to &quot;opt-out&quot; from its rigid type system.<p>The question is, is Go type system a good compromise between simplicity and expressiveness ?<p>I guess language design is hard, because the competition (Nim,Rust,...) also have its share of issues.