Data Race Patterns in Go
&gt; 2. Slices are confusing types that create subtle and hard-to-diagnose data races<p>The &quot;Slices&quot; example is just nasty!  Like, this is just damning for Go&#x27;s promise of <i>&quot;_relatively_ easy and carefree concurrency&quot;</i>.<p>Think about it for a second or two,<p>&gt;&gt; The reference to the slice was resized in the middle of an append operation from another async routine.<p>What exactly happens in these cases?  How can I trust myself, as a fallible human being, to reason about such cases when I&#x27;m trying to efficiently roll up a list of results. :-&#x2F;<p>Compared to every other remotely mainstream language, perhaps even C++, these are extremely subtle and sharp.. nigh, <i>razor sharp</i> edges.  Yuck.<p>One big takeaway is this harsh realization: Golang guarantees are scant more than what is offered by pure, relatively naïve and unadulterated BASH shell programming.  I still will use it, but with newfound fear.<p>As a multi-hundred-kloc-authoring-gopher: I love Go, and this article is <i>killing me</i> inside.  Go appears extremely sloppy at the edges of the envelope and language boundaries, moreso than even I had ever realized prior to now.<p>Full-disclosure: I am disgusted by the company that is Uber, but I&#x27;m grateful to the talented folks who&#x27;ve cast a light on this cesspool region of Golang.  Thank you!<p>p.s. inane aside: I never would&#x27;ve guessed that in 2022, Java would start looking more and more appealing in new ways.  Until now I&#x27;ve been more or less &quot;all-in&quot; on Go for years.