1、包和文件
在Go语言中包的作用和其他语言中的库或模块的作用类似,用于支持模块化、封装、编译隔离和重用。关键点如下:
(1)包中保存一个或者多个.go结尾的文件,而包的目录就是包的导入路径
(2)中Go中通过一条简单的规则来管理标识符是否对外可见:导出的标识符以大写字母开头
关于(2)可以理解为如果你的变量或者函数等标识符如果以大写开头,则视为C++中的public,对外可访问。如果以小写开头,则视为private,对外不可见。
package AddDemo
var Str string
var str string
func Add(a int16, b int16) int16 {
return a + b
}
func add(a int16, b int16) int16 {
return a + b
}
如上述代码:其中变量str和函数add则属于对外不可见,此时即使导入AddDemo包也无法访问,但是可以访问变量Str和函数Add,因为它们以大写开头。
(3)关于包的初始化-init()函数
我的理解为:C++类中的构造函数,但Go语言中没有类,提供了函数、方法、接口、结构体等足以解决面对对象的多态问题。
init()函数:func init(){ /* 初始化代码块* / }
一个.go文件中,可以存在多个init()函数用于初始化。注意:这些init()函数不能被调用和引用,当程序启动时,会按照init()函数声明的顺序自动执行。
package AddDemo
var Str string
var In int
func init() {
Str = "hello"
In = 17
}
func init() {
Str = "HelloWorld"
In = 27
}
2、导入包-import
这个没啥好记录的,import包的路径就行。但是有一点,Go语言可以给包起别名,类似于Mysql中给表起别名。具体看如下代码:
package main
import (
ad "AddDemo"
"fmt"
)
func main() {
fmt.Println(ad.Str)
fmt.Println(ad.In)
}
这里为AddDemo包起了别名ad,则下面代码可以直接用ad代替AddDemo。