Public and Private Access Modifiers in Go: Upper Case and Lower Case Confusion
When transitioning from Delphi or C to Go, understanding the rules governing access modifiers can be challenging. Particularly confusing is the usage of upper and lower case letters to denote public and private access.
Rule for Access Modifiers:
In Go, public access is achieved by capitalizing the function or type name. For instance, a public function named myFunc would be written as func MyFunc().
Container Classes Exception:
However, when working with container classes like container/list, the rule seems to break. The container type name List is written in upper case, indicating public access, but the package name container/list is written in lower case. This inconsistency can be confusing.
Explanation:
In Go, packages are different from types. The package name indicates the file and directory where a package's code resides. The package name is usually the same as the last part of the package path, but this is not always the case.
The public members of a package are accessed through the upper case type name. In this example, container/list is the package path and List is the public type name. The lower case list is the alias for the package, allowing you to refer to it as list in your code.
Therefore, func GetFactors(value *int64) *list.List {...} and l := list.New() are both valid because List is a public type within the container/list package, and list is an alias for that package.
The above is the detailed content of Why Are Go Functions Public with Uppercase Names but Packages Private with Lowercase Names?. For more information, please follow other related articles on the PHP Chinese website!