在 Go 语言中,区分导出和非导出名称主要基于命名约定。Go 语言使用首字母大写的命名方式来表示导出的(public)标识符,而使用首字母小写的命名方式表示非导出的(private)标识符。
* 导出名称(Public Identifier):如果一个标识符的首字母是大写的,那么它就是导出的(public),可以在其他包(package)中被访问和使用。例如,`MyFunction`、`MyVariable` 和 `MyStruct` 都是导出的名称。
* 非导出名称(Private Identifier):如果一个标识符的首字母是小写的,那么它就是非导出的(private),只能在当前包(package)内部被访问和使用。例如,`myFunction`、`myVariable` 和 `myStruct` 都是非导出的名称。
这种命名约定是 Go 语言特有的,用于区分标识符的可见性和作用范围。当你想将一个函数、变量或结构体暴露给其他包时,可以使用大写字母作为其名称的首字母;而当你希望将一个函数、变量或结构体限制在包内使用时,可以使用小写字母作为其名称的首字母。
请注意,在 Go 语言中,只有当函数、变量或结构体被定义在包级别(即不是嵌入在另一个结构体中)时,这种命名约定才适用。对于嵌套类型或局部作用域中的标识符,它们不受此规则的限制。