4.4.2 数据结构 - Package

package 的数据结构定义在文件$GCROOT/compile/internal/types2/package.go中:

type Package struct {
	path     string     // 包的引用路径,例如 import "fmt" 中的 "fmt"
	name     string     // 包名,即代码中 package xxx 声明的内容
	scope    *Scope     // 包作用域,该包的 public 符号对象都在该作用域内
	complete bool       // 如果该包的 scope 内包含了所有的 public 符号对象,则为 true, 否则为 false
	imports  []*Package // 该包的依赖
	fake     bool
	cgo      bool
}

包通常以对象文件(.o 或者 .a 文件)的形式存在于文件系统中,而Package则对应一个对象文件在编译器中的内存结构。在编译阶段,包加载器负责完成包的加载与解析,包内符号对象都在scope属性中,下文包加载器一节会对加载逻辑做详细介绍。

最后更新于