Yes. Thank you! I completely admit that I'm wrong. Nevertheless, 1 thing to add. Maybe I'm being pedantic, or maybe I still don't get it, but even Go's FAQ says "everything in Go is passed by value". If you call what Go does pass by reference, what do you call what C#'s "ref" keyword does?
There's really no such thing as pass by reference in Go. It's all pass by value. However, the value may be a pointer to other data that doesn't get copied. This is how pointers, maps, slices, and interfaces work (if you're passing an interface to another function that also takes an interface that is. If you're passing a non-interface value into a function that takes an interface, the value gets copied when it is wrapped in the interface... again, that value might be just a pointer or other small thing, or if you don't structure the code right, it might be a whole lot of data.. but usually it's not, because we write code specifically not to copy much data).
Besides the few special built-in types that are passed by reference, everything else if passed by value. (Even "reference types" are actually structs that are passed by value (http://golang.org/pkg/reflect/#SliceHeader). And not reference types in the sense they are in other languages.
For example if you pass a struct, you are passing it by value, but if you pass a pointer to that struct, you are also passing by the argument by value. Why? Because even though the pointer contains a reference to the struct as its value, the pointer itself (which is the same as any other integer datatype to the computer) is being passed by value.
If your not familiar with pointers and C and languages with reference values like C++/Java this distinction isn't going to mean much to you however.
Yeah, I wish they hadn't called them "Reference types" - I think it's confusing. They're just value types that happen to have a small value and a pointer to the bigger data.
Where the commented out code represents the .net equivalent. I would expect that the .net compiler simply rewrites your code for you to hide the slightly tricky messing about with pointers. So the .net ref looks like a bit of syntactic sugar over what you were trying to do in your post.