I can't help but be amused to see the complaint that Go's type system is, of all things, too complex.
At the time I first picked up Go, Racket was my favorite language of choice[0]. One of the biggest things I noticed about Go was how little I needed to think about types and implementation. Part of this was simply having a static typechecker[1], but part of it is how the rest of the tooling is designed as well.
> How many people programming with Go pass arrays around?
Most people using Go shouldn't be using arrays at all, since they really don't fit most use cases (fixed size and size is part of the type).
[0] For the record, I still like Racket, but I've found I'm undeniably far more productive in Go.
[1] Type Racket exists, but at least at the time, most libraries were untyped, which meant I had to write typed wrappers for everything.
"However, the type system of Go is so complex"
The type system is anything but complex, even in the non-system complaints expressed.
Regardless of this, I learned Go during the last Stripe CTF and placed top 5 in one of the rounds with it sooo... I don't believe learning to be effective with it takes all that long. It was quite enjoyable to learn as well.
I think the essence of my point still stands in that the example the author provides is very shallow and hardly something that stops you from writing Go or even writing any kind of protocol in Go.
From "Effective Go":
"We must return the slice afterwards because, although Append can modify the elements of slice, the slice itself (the run-time data structure holding the pointer, length, and capacity) is passed by value."
The slice, however, is a small structure to pass to a function in that you are not performing a copy of each individual element in the slice.
You should know about how your types are passed around if you are using any language.
The example given was arrays in Go. Arrays are passed by value, but slices (pointers to arrays) are passed by reference. This is very simply described in the Effective Go reading. It's not a hard concept. I don't like you writing off Go with that example. It sounds like you made an emotional decision against the language and are grasping for logical reasons to support your already made decision.
How many people programming with Go pass arrays around? It's an easy lesson to learn.