Go takes a radically different approach to defining the visibility of members.

There is no "public" or "private" label for items. The case of the initial letter of the identifier determines the visibility of that item.

If the initial character is an upper case letter, the identifier is exported (public); otherwise it is not. 

  • upper case initial letter: Name is visible to clients of package
  • otherwise: name (or _Name) is not visible to clients of package
This rule applies to variables, types, functions, methods, constants, fields. That's all there is to it. 

There's also no method overloading. For a given type, there's only one method with that name. 

This results in clarity and readable programs. The code itself expresses the programmer's intent. 

I love Go.