开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:包使用注意事项和细节(1)】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/625/detail/9595
包使用注意事项和细节(1)
1.在给一个文件打包时,该包对应一个文件夹,比如这里的 utils 文件夹对应的包名就是 utils,文件的包名通常和文件所在的文件夹名一致,一般为小写字母。
2.通常保持一致,意味着也不一定一样。例如
文件夹名字为 utils,但是包名可以写为 abc,包名和文件夹名一般相同。 保存没有问题,但是在 main.go中运行” go_code/chapter06/fundemo01/utils”或者” result :=utils.Cal(n1, n2, operator)”代码时存在包名仍为 utils,运行结果报错,显示underfined: utils,并且提示包名应该为 abc。 所以将 result :=utils.Cal 中的 utils 改为 abc,为包名, 而 go_code/chapter06/fundemo01/utils 中的 utils 其实是引到包所在的文件夹。之后运行结果正确。 但是考虑到运行 abc 不常见,所以一般还是与包名保持一致,习惯上还是保持一致。
3.当一个文件要使用其它包函数或变量时,需要先引入对应的包相当于go_code/chapter06/fundemo01/utils,需要现在 main 中引入
1)引入方式1: import "包名"
2)引入方式2: import ( "包名” "包名" ) 例如将 import ( “fmt”
“go_code/chapter06/fundemo01/utils” )
改为 import ( “fmt” ) import “go_code/chapter06/fundemo01/utils”
但是习惯上放在一起写
3)package 指令在文件第一行,然后是 import 指令。
4)在 import 包时,路径从$GOPATH 的 src 下开始,不用带 src ,编译器会自动从 src 下开始引入 GOPATH 之前在环境变量中配置过,打开计算机高级系统设置,其中在系统变量中定义了 gopath,如图,该 GOPATH 在D盘下实际上是从该路径下的 src 开始去定位
5)为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似其它 语言的 public ,这样才能跨包访问。比如 utils.go 的 Cal 函数 如图若 Cal 写为小写 cal,则其他包不能访问 另外,若定义了一个变量需要其他包使用,例如 util 包定义了一个变量,输入 var num1 int = 300 需要在 main 包中使用该变量,则要将 num 写为大写 Num,然后在 main.go中输入 fmt.Println( “utils.go Num”, utils.Num1) 运行后可以访问
6)在访问其它包函数,变量时,其语法是包名.函数名,比如这里的 main.go 文件中
7)如果包名较长,Go支持给包取别名,注意细节,取别名后,原来的包名就不能使用了,比如在 main.go中 “go_code/chapter06/fundemo01/utils” 引入了包所在的文件夹,fmt.Println( “utils.go Num”, utils.Num1)就是通过 utils 进行访问,也可以给该文件夹对应的包取个别名 输入 util “go_code/chapter06/fundemo01/utils”,给这个包取别名为 util,那么下面的函数要通过该别名进行访问,不能再使用原来的 utils,例如修改 fmt.Println( “utils.go Num”, util.Num1) 为了增加效果,在 number 后添加一个~,即 utils.go Num~ 运行结果为 utils.go Num~=300 result~=3.5 result~=30.15 所以看到在引入的路径前写有一个变量,就相当于给该文件夹所在的包起了一个别名。
说明: 如果给包取了别名,则需要使用别名来访问该包的函数和变量。