In Java, everything is seen as an 'object' and passed by reference.
In Go (and other low-level languages) things can be passed by reference or passed by value.
Passing the Client struct in your example by value (not using a *Client pointer) means that Go will create a copy of all those values inside the struct when it is passed to the function. This is faster for small things, like say the int64 (64 bits) type, but is much much slower for things that are larger (lets say an [1024]byte array).
Passing by reference means that the memory is kept in one location, and only a pointer is passed into the function, instead of a copy of all the information.
Additionally, should the Read function in your example want to change data within the Client struct (since you're from Java, think 'class' instance) it must operate on a pointer *Client, otherwise the function would be operating on a copy of that data (think a copy of the 'class' instance) and changes made to it would not translate to other portions of the program.
There are many places online you can read about pointers, I just simplified it a bit in hopes of making it somewhat easier to understand for you. There are probably a few specific technical details I missed that someone will call me out on.
Bob