GOPATH
.(GOPATH的路径)
├── bin (编译后生成的可执行文件)
├── pkg (编译时生成的中间文件:.a)
└── src (源代码)
- 对于导入的包,编译器的查找顺序:GOROOT -> 项目 GOPATH -> 全局 GOPATH
- Golang 不要求包名和目录名一致,
import导入的是源文件在 src 目录的相对路径,而不是包名,而调用方法的格式为packageName.FunctionName - 同一个目录下只能有一个包名
变量与常量
:=只能被用在函数体内,不能用于全局变量的声明与赋值- 函数体内声明的变量必须被使用,全局变量允许不被使用
unsafe.Sizeof()用于获取变量或数据类型在内存中占用的字节数(不考虑内存对齐和填充的情况)- 没有被显式赋值的常量将自动使用上一个常量的值
函数
- 如果首字母是小写,则只能在包内使用;如果首字母是大写,则可以在包外被引入使用
- Golang 中函数的参数传递都是值传递(函数参数和返回值都会被复制)
- Golang 中的函数可以有任意多个返回值
- 函数闭包:函数内部的匿名函数引用了外部作用域的变量,该变量由于内存逃逸会被分配到堆上,由 GC 管理
defer会将函数推迟到外层函数返回之后执行。推迟调用的函数其参数会立即求值(defer语句出现时就已经确定下来了),但直到外层函数返回前该函数都不会被调用return不是原子级操作,执行过程为:设置返回值 -> 执行defer语句 -> 返回
异常捕获
recover() 捕获当前函数级(该函数及其调用的函数)中的 panic(),捕获后当前函数结束,后面的代码不会被执行,但调用该函数的函数继续执行
接口
- 空接口:所有的类型都实现了空接口,空接口可以存储任意类型的数值
- 类型断言:类型断言返回的是一个值
结构体
结构体内声明变量无需使用 var
数组与切片
- 数组大小不可改变
a[low : high]左闭右开区间- Golang 中的切片,不是拷贝,而是定义了新的指针,指向原来数组所在的内存空间
字符串
for range 遍历字符串时,返回的是 Unicode 码点(rune)
字典
for range 遍历字典时,顺序是随机的


