This old blog post has a pretty good explanation about how Go slice works: https://blog.golang.org/go-slices-usage-and-internals
Once you realize slices are just (pointer, length, capacity) structures, and the structure itself is copied by value, the first 2 WAT is pretty trivial.