It's possible that this may create confusion to other people more familiar with, for example, the C++ concept of passing by reference which is passing an actual reference (v. "passing a pointer").
[0] https://www.tutorialspoint.com/cprogramming/c_function_call_...
If I pass a java object to a function, I'm passing a (probably) 8-byte pointer to some memory with a class tag, fields, whatever. It goes on the stack just like an 8 byte long.
In languages that support pointers more directly, I'm doing the same thing, maybe minus the class tag in the pointed-to memory. Address is in an 8 byte type, put it on the stack and access the pointed-to struct in your new frame.
Yet I've seen interview questions about whether you're "passing by reference" or "passing a reference by value" like there's some big meaningful difference and one answer is wrong.
I don't get it. Is this just one of those nerd arguments where we're debating semantics for the sake of it?
The usual litmus test is having two objects (or ints or whatever), write a fn `swap(a, b)` where the two are swapped after the call is over. Can't do that in Java or Go or Python or C; but you can in e.g. C++ and you sorta-can in Lisp. In C++, you'd see int& (or whatever) show up in the arguments of swap().
But in C and Go you can pass pointers to pointers, in Java and Python objects with mutable object references..
It seems like the whole article could have been "Go does not have the C++ reference type, so it's not really in the mix when calling functions".
Also you say "two objects", but if the objects were compound, e.g. arrays, then I could write swap in C.