1.Go 在执行main 函数之前会先执行 init 函数
2. go import 某个包使用下划线,例如:
import (
"fmt"
"log"
"os"
_ "../sample/matchers"//一般不提倡相对路径导入
// "./search"
)
Go 语言的每个代码文件都属于一个包, main.go 也不例外, 此处matchers 是一个目录,里面可包含多个.go文件,所有处于同一个文件夹里的代码文件,必须使用同一个包名(matchers),_ 表示 让编译器接受这类导入,并且调用对应包内的所有代码文件里定义的 init 函数。
3. 在 Go 语言里,标识符要么从包里公开,要么不从包里公开。当代码导入了一个包时,程序可以直接访问这个包中任意一个公开的标识 符。这些标识符以大写字母开头。以小写字母开头的标识符是不公开的,不能被其他包中的代码直接访问。
4. 在 Go 语言中,所有变量都被初始化为其零值。对于数值类型,零值是 0;对于字符串类型,零值是空字符串;对于布尔类型,零值是 false;对于指针,零值是 nil。对于引用类型来说,所引用的底层数据结构会被初始化为对应的零值。但是被声明为其零值的引用类型的变量,会返回 nil 作为其值。
5. 在 Go 语言中,通道(channel)和映射(map)与切片(slice)一样,也是引用类型,不过通道本身实现的是一组带类型的值,这组值用于在 goroutine 之间传递数据。通道内置同步机制,从而保证通信安全。
6. sync 包的 WaitGroup 跟踪所有启动的 goroutine。非常推荐使用 WaitGroup 来跟踪 goroutine 的工作是否完成。 WaitGroup 是一个计数信号量,我们可以利用它来统计所有的goroutine 是不是都完成了工作。每个 goroutine 完成其工作后,就会递减 WaitGroup 变量的计数值,当这个值递减到 0 时,我们就知道所有的工作都做完了