开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: Go 标识符命名特点和规范】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9537
Go 标识符命名特点和规范
标识符命名注意事项
(1)包名
①第一节课中讲过,每一个 go 文件都应归属于一个包,命名包名时要使 package 的名字和目录尽量保持一致,即包名尽量与其所在文件夹名称一致,但这不是绝对的。
案例1
在计算机中找到源代码,go 中包含 src,src 下方有各种文件夹,任意打开一个文件夹中的源代码,其包名与文件夹名称一致。
如打开 fmt 文件夹,任意打开一个源代码 print.go,其中的包名为 fmt,与其所在的文件夹的名称一致;
打开 src 下的文件夹 errors,任意打开一个源代码 errors.go,其中的包名为 errors,与其所在的文件夹的名称一致。
案例2
曾经的课堂演示中,名为 demo04 的文件夹下有一个文件 main.go ,其内包名为main,
原程序代码如下:
package main
import (
"fmt"
)
func main() {
var i int=10
i = 30
i = 50
fmt.println("i=",i)
}
由于演示中该文件夹中仅一个文件 main.go,因此包名与文件夹名不同影响较小,但实际开发过程中,某一文件夹下文件不止一个,不同的文件夹与各自的包对应,可以更方便管理代码,
因此以上案例在实际开发过程中应做适当修改。
可在原文件夹 demo04 下再新建一个文件夹 main,并将文件 main.go 移动到引得文件夹 main 中,即可使得代码的包名与其所在文件夹名一致。
②尽量采取有意义的包名,简短,有意义,不要和标准库的包名冲突
如标准库中有一个叫做 fmt 的包,则不要再命名一个同名的包。
(2)变量名、函数名、常量名
采用驼峰法,即变量名称中第一个单词首字母小写,而第二个单词首字母大写,该变量名形式:
xxxYyyyZzzz...。
案例3
定义一个 string 类型的变量表示学生的姓名
var stuName string="tom"
案例4
定义一个 float32 型变量表示商品的价格
var goodPrice float32="1234.5"
(3)如果变量名、函数名、常量名首字母大写,则可以被其他的包访问,如果小写,则只能在本包中使用。
这体现了 Go 语言编程的特性,其他的编程语言则没有这种特性,如 Java 语言中通过使用 public、protected、private 等关键字来控制使用范围。
Go 语言中的这种特性可简单理解为首字母大写是公有的,等同于 Java 语言中的 public,首字母小写是私有的,等同于 Java 语言中的 private,但要注意 Go 语言中没有这些关键字。
案例 5
要使得 demo04 中 main 文件夹中的文件 main.go 使用 model 文件夹 utis.go 中的变量“宋江”。
utis.go 文件中的代码如下:
package model
var heroName string = "宋江"
main.go 文件中的代码见案例 2
修改方案如下:
① main.go 文件代码修改:
package main
import (
"fmt"
//为了使用 utis.go 文件中的变量或函数,需要先引入该包
"go_code/chapter03/demo04/model"
/按照工作目录顺序(路径)引入,
从 go_code 开始引( go pass 已引用至前面的 d:/goproject,
因此可忽略,而 src 属于默认路径,会自动添加,也可忽略)
}
func main() {
var i int=10
i = 30
i = 50
fmt.println("i=",i)
//使用 utis.go 的 heroName 包名.标识符
fmt.println("model.heroName")
//编译器报错,提示 model.heroName 是一个不可导入的变量,因为 utis.go 中该变量 heroName 首字母“h”小写,
因此,不可被 main 包引用,可以将 utis.go 文件中 model 包中的变量 heroName 改为首字母大写形式 HeroName ,并在该文件中对应进行修改。
fmt.println("model.HeroName")
}
② utis.go 文件代码修改:
package model
var HeroName string = "宋江"
最终 main.go 文件中代码的输出结果中包含“宋江”。