&gt; For example, in your reddit post you claim that := is problematic, and indeed its semantics is tricky and often trips beginners (and even experienced!) programmers. However := semantics is not actually that complicated &quot;define every variable that isn&#x27;t defined inside the current scope, otherwise assign them&quot; and the errors stem from the fact that people assume that the scope lookup for := is recursive, which would arguably result in a more complicated formal semantics.<p>Clearer examples of unnecessary complexity in Go would be the function-scoped nature of &quot;defer&quot; (implicit mutable state is much more complicated than block scoping) and the inconsistent behavior of &quot;nil&quot; with the built-in collections (reading from a nil map returns zero values, but reading from a nil slice panics).