<story><title>What Golang Is and Is Not</title><url>http://danmux.com/posts/what_golang_isnt/</url></story><parent_chain><item><author>divan</author><text>&amp;gt; Go is a language that pushes remembering corner cases and failure conditions onto the programmer&lt;p&gt;Can you elaborate on this? I write go for 3+ years and I have no idea what corner cases and failure conditions do you mean.</text></item><item><author>codygman</author><text>As someone who writes Go every day for work, I can&amp;#x27;t agree that Go is simple. Using a language for analytics without generics can be quite painful and error prone.&lt;p&gt;Go is a language that pushes remembering corner cases and failure conditions onto the programmer rather than the language and runtime itself.&lt;p&gt;When you already have to remember a myriad of corner cases for business logic, also remembering so many corner cases for your code hurts productivity.&lt;p&gt;I also believe that languages exist to make getting to an end result in given domains easier. Go does not make my life easier.&lt;p&gt;I really hope it gets generics. I wish it would do away with nil&amp;#x2F;null.&lt;p&gt;Nim is a very good language that actually accomplishes the simplicity Go wanted imo.&lt;p&gt;Go affords simplicity to the Go compiler writers at the cost of burdening Go users with having to remember inane things.</text></item></parent_chain><comment><author>oconnor663</author><text>Examples that bother me sometimes. YMMV of course.&lt;p&gt;Writing to a closed channel panics, but writing to a nil channel blocks forever.&lt;p&gt;Appending to a nil slice works fine, but inserting into a nil map panics.&lt;p&gt;If you have a function that returns an error struct, and you wrap it with another function that returns the error interface, nil returns from the inner function will no longer test equal to nil.&lt;p&gt;Defining a method with a receiver type of Foo, rather than &amp;lt;star&amp;gt;Foo, means all modifications to the Foo get silently dropped. This can also happen to methods that correctly take a pointer receiver, if their &lt;i&gt;caller&lt;/i&gt; incorrectly takes a value receiver.&lt;p&gt;Maps are not threadsafe&amp;#x2F;goroutine-safe.&lt;p&gt;Expression evaluation order is not defined, and varies between compilers. (&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;golang&amp;#x2F;go&amp;#x2F;issues&amp;#x2F;15905&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;golang&amp;#x2F;go&amp;#x2F;issues&amp;#x2F;15905&lt;/a&gt;)</text></comment>
<story><title>What Golang Is and Is Not</title><url>http://danmux.com/posts/what_golang_isnt/</url></story><parent_chain><item><author>divan</author><text>&amp;gt; Go is a language that pushes remembering corner cases and failure conditions onto the programmer&lt;p&gt;Can you elaborate on this? I write go for 3+ years and I have no idea what corner cases and failure conditions do you mean.</text></item><item><author>codygman</author><text>As someone who writes Go every day for work, I can&amp;#x27;t agree that Go is simple. Using a language for analytics without generics can be quite painful and error prone.&lt;p&gt;Go is a language that pushes remembering corner cases and failure conditions onto the programmer rather than the language and runtime itself.&lt;p&gt;When you already have to remember a myriad of corner cases for business logic, also remembering so many corner cases for your code hurts productivity.&lt;p&gt;I also believe that languages exist to make getting to an end result in given domains easier. Go does not make my life easier.&lt;p&gt;I really hope it gets generics. I wish it would do away with nil&amp;#x2F;null.&lt;p&gt;Nim is a very good language that actually accomplishes the simplicity Go wanted imo.&lt;p&gt;Go affords simplicity to the Go compiler writers at the cost of burdening Go users with having to remember inane things.</text></item></parent_chain><comment><author>kornish</author><text>I presume an example would be something like remembering to check `rows.Err()` in `package sql` at the end of iterating through all rows. If you check the error each iteration while calling `rows.Scan()` but forget to check the `rows.Err()` at the end, it could potentially be much, much later that you find out something went wrong.</text></comment>