runtime
包提供了与 Go 运行时系统交互操作的函数.导入方式为 import "runtime"
环境变量
下面的主机上的环境变量控制 Go 程序的运行时行为,其用法和含义可能在各个版本间改变
GOGC
GOGC
设置初始垃圾回收目标百分比.当新分配的数据与上一次垃圾回收之后的剩余数据之比达到此变量值时,将触发垃圾回收.默认 GOGC=100
. GOGC=off
将完全禁用垃圾回收.runtime/debug
包的 SetGCPercent
函数可以在 Go 程序运行时修改此百分比.参见 https://golang.org/pkg/runtime/debug/#SetGCPercent
GODEBUG
GODEBUG
环境变量控制运行时中的调试变量,它是一个用逗号分割的 name=val
列表,用于设置以下变量
1 | allocfreetrace: setting allocfreetrace=1 causes every allocation to be profiled and a stack trace printed on each object's allocation and free |
- allocfreetrace: 设置 allocfreetrace=1 使每次分配内存都进行分析,并在每个对象的内存分配及释放时打印堆栈跟踪信息
- clobberfree: 设置 clobberfree=1 使垃圾回收器在释放对象时用不好的内容破坏对象的内存内容
- cgocheck:设置 cgocheck=0 将禁用所有使用 cgo 将包指针错误传递给非 Go 代码的包检查;cgocheck=1(默认) 将启用相对低耗的检查,可能会丢失一些错误;cgocheck=2 将启用高消耗的检查,不会遗漏任何错误,但会导致程序运行缓慢
- efence:设置 efence=1 分配器以每个对象都分配唯一页面,并且地址从不回收的方式运行
GOMAXPROCS
GOMAXPROCS
环境变量限制了可同时执行用户级 Go 代码的操作系统线程的数量.对 Go 代码在系统调用中被阻塞的线程数量没有限制.那些不计入 GOMAXPROCS
限制. runtime.GOMAXPROCS()
函数查询并修改限制.
GORACE
GORACE
环境变量为使用 -race
标志的构建程序配置了竞争检测器.详情参见 https://golang.org/doc/articles/race_detector.html
GOTRACEBACK
GOTRACEBACK
环境变量控制在 Go 程序由于未处理的异常或意外的运行时条件而失败时产生的输出量.默认情况下,产生错误时将打印当前 goroutine 的堆栈跟踪,忽略运行时系统的内部函数,然后以退出代码 2 退出.如果没有当前 goroutine 或故障是运行时内部的,则产生错误时会打印所有 goroutine 的堆栈跟踪信息.
GOTRACEBACK=none
表示完全省略 goroutine 堆栈跟踪信息GOTRACEBACK=single
(默认)的行为如上所述GOTRACEBACK=all
表示为所有的用户创建的 goroutine 添加堆栈跟踪信息GOTRACEBACK=system
与all
类似,但为运行时函数添加了堆栈跟踪信息,并显示了在运行时内部创建的 goroutineGOTRACEBACK=crash
类似于system
,但多用于操作系统崩溃而不是程序退出
GOTRACEBACK 设置 0,1 和 2 分别是 none,all 和 system 的同义词.runtime/debug
包的SetTraceback
函数允许在运行时增加输出量,但不能将其减少到环境变量指定的量以下.请参阅 https://golang.org/pkg/runtime/debug/#SetTraceback
GOARCH
,GOOS
,GOPATH
,GOROOT
GOARCH
,GOOS
,GOPATH
,GOROOT
环境变量完善了 Go 环境变量集.它们会影响 Go 程序的构建(请参阅 https://golang.org/cmd/go 和 https://golang.org/pkg/go/build).GOARCH
,GOOS
,GOROOT
会在编译时记录下来,并可以通过此包中的常量或函数来使用,但它们不会影响运行时系统的执行.
常用类型定义
1 | type Func struct { |
常用内置常量及变量
1 | const Compiler = "gc" // 编译器 |
常用函数
runtime
包函数
1 | // 返回 Go 的根目录.如果存在 GOROOT 环境变量,返回该变量的值 |
Func
结构体方法
1 | // 返回外部函数的地址 |