目标
了解
- 大小写敏感性:大写和小写字母被认为是不同的
- 保留字与内建名称:Go 定义了一系列关键字(不能用作自定义名字)和内建名称(虽然内建名称可以被重新定义,但要谨慎使用)。
- 函数内部的名字作用域仅限于函数内部,而包级(全局)名字如果首字母大写则为导出(对外可见),否则仅在包内可见。
- Go 推荐使用驼峰式命名而非下划线分隔
概念
-
标识符(identifier)是用来命名变量、函数、类型等的名字。大多数编程语言都有类似的命名规则,但细节可能不同。
-
命名规则:名字必须以字母(包括 Unicode 字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
- 在编译器解析过程中,统一的规则简化了词法分析和符号管理。
-
大小写敏感性
- 这种设计还决定了包导出的规则
- 使得程序员可以通过大小写区别同一含义的不同版本,比如内部实现与外部接口的差异(尽管通常建议避免混淆)。
-
关键字(保留字):语言语法的一部分
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
-
预定义名字(内建元素):为程序提供了常用的工具函数、类型和常量
内建常量: true false iota nil 内建类型: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error 内建函数: make len cap new append copy close delete complex real imag panic recover
-
作用域与可见性
- 作用域决定了一个名字可以在哪里被访问。很多语言都有局部作用域、全局作用域和模块作用域的概念。Go 通过包和导出规则实现了这一点,这是模块化编程的重要基础。
- 局部与全局:
- 如果一个名字在函数内部定义,它只在该函数内部有效;如果在函数外部定义,则在整个包中都可以访问。
- 导出规则:
- 包级名字的首字母大写代表导出(public),可供外部包访问;首字母小写则仅在包内有效。
- 例如,
fmt.Printf
中Printf
以大写开头,因而可以在包外调用,而包名一般都使用小写以避免混淆。
-
命名风格
- 推荐使用驼峰式命名(CamelCase)而非下划线分隔
- 对于局部变量,通常使用短小的名字(如
i
、j
等),因为作用范围有限; - 对于作用域较大、生命周期较长的变量或函数,则建议使用描述性更强的名字。
- 约定词缩略:
- 对于常见缩略词(如 ASCII、HTML),约定上避免混合大小写书写。例如可以使用
htmlEscape
或HTMLEscape
,但不建议使用escapeHtml
- 对于常见缩略词(如 ASCII、HTML),约定上避免混合大小写书写。例如可以使用
要点
语言特性
- 基于作用域的命名管理:通过首字母大小写的简单规则实现了包内与包外的访问控制。