Not the OP, but I think a good contrast is with Rust. Both languages purportedly emphasise memory safety and concurrency. Rust achieves this within the type system at compile-time; no nil pointers (conditional destructuring is used instead), no garbage collection is required, and concurrency is safe by virtue of compile-time checks. In Golang nil pointers exist and can be dereferenced, you can make a mistake when using concurrency primatives, and clobber shared memory.
On the other hand, Golang is a much simpler language. It's relatively easy to learn and understand.