I guess an object returned from a function (like New() style constructors) is moved outside, which is done by compiler implicitly.
There are already pointers and implicit reference semantics (slice, map, chan, and closure capture) in Go, except copy, and move semantics is another way to operate on some specific memory, which exists in C++ and Rust for memory efficiency.