Your example defines a type called test and you’re calling functions right on that type instead of calling them on instances of that type. Let’s change the receiver of your show method to a pointer to make the code more ugly and to see where “weird” stuff is happening: https://play.golang.org/p/T91W05TpbeZ
Now it should be clearer that there’s a “this” parameter and then the other arguments. Now that we see it this way, we probably want to refactor the show function to show the current test, not a test passed as a parameter: https://play.golang.org/p/UgzaldqVL46
Method invocation in Go is somewhat like static functions in C#: they’re “syntactic sugar”