Explain the use of Go's call by value and call by reference semantics for function arguments?