go原码组织

go path模式

Go 语言源码的组织方式就是以环境变量 GOPATH、工作区、src 目录和代码包为主线的。一般情况下,Go 语言的源码文件都需要被存放在环境变量 GOPATH 包含的某个工作区(目录)中的 src 目录下的某个代码包(目录)中

在安装后如果产生了归档文件(以“.a”为扩展名的文件),就会放进该工作区的 pkg子目录;如果产生了可执行文件,就可能会放进该工作区的 bin 子目录

Screenshot_20211117_223336.png

go mod 模式

在go mod模式下源码可以放在任意地方,go mod依赖包会先下载到pkg目录,保存为cach文件再解压,以包名+版本号进行版本区分,如[email protected]

go test

函数式相关

高阶函数

接受其他函数作为参数传入,或者把其他函数作为结果进行返回的函数,可以在不修改函数本身的情况下对传入的函数进行修饰

闭包

闭包可以理解为有状态的匿名函数,返回的函数中保存着不同的状态

闭包的价值在于保护函数内的变量,同时给予函数保存外部变量的能力

数组

创建数组

编译时期的数组由NewArray函数生成,该类型包含两个字段,分别是元素类型 Elem 和数组的大小 Bound,这两个字段共同构成了数组类型

func NewArray(elem *Type, bound int64) *Type {
	if bound < 0 {
		Fatalf("NewArray: invalid bound %v", bound)
	}
	t := New(TARRAY)
	t.Extra = &Array{Elem: elem, Bound: bound}
	t.SetNotInHeap(elem.NotInHeap())
	return t
}