非常教程

Go参考手册

运行时 | runtime

调试 | runtime/debug

  • import "runtime/debug"
  • 概况
  • 索引

概况

程序包调试了包含程序在运行时进行调试的功能。

索引

  • func FreeOSMemory()
  • func PrintStack()
  • func ReadGCStats(stats *GCStats)
  • func SetGCPercent(percent int) int
  • func SetMaxStack(bytes int) int
  • func SetMaxThreads(threads int) int
  • func SetPanicOnFault(enabled bool) bool
  • func SetTraceback(level string)
  • func Stack() []byte
  • func WriteHeapDump(fd uintptr)
  • type GCStats

包文件

garbage.go stack.go stubs.go

func FreeOSMemorySource

func FreeOSMemory()

FreeOSMemory 强制进行垃圾收集,然后尝试尽可能多地将内存返回给操作系统。(即使未调用此函数,运行时也会逐渐将内存返回到后台任务中的操作系统。)

func PrintStackSource

func PrintStack()

PrintStack 将由 runtime.Stack 返回的堆栈跟踪打印到标准错误。

func ReadGCStatsSource

func ReadGCStats(stats *GCStats)

ReadGCStats 将有关垃圾收集的统计信息读入统计信息。暂停历史记录中的条目数与系统有关; stats.Pause 片断将在足够大时重用,否则重新分配。ReadGCStats 可能会使用 stats.Pause 片断的全部容量。如果 stats.PauseQuantiles 不是空的,ReadGCStats 会用分位数来填充总结暂停时间的分布。例如,如果 len(stats.PauseQuantiles)为5,则将填充最小值,25%,50%,75%和最大暂停时间。

func SetGCPercentSource

func SetGCPercent(percent int) int

SetGCPercent 设置垃圾收集目标百分比:当新分配的数据与上一次收集后剩余的实时数据的比率达到此百分比时,触发收集。SetGCPercent 返回先前的设置。初始设置是启动时 GOGC 环境变量的值,如果未设置该变量,则为100。负数百分比会禁用垃圾回收。

func SetMaxStackSource

func SetMaxStack(bytes int) int

SetMaxStack 设置单个 goroutine 堆栈可以使用的最大内存量。如果任何 goroutine 在增长堆栈时超过此限制,则该程序崩溃。SetMaxStack 返回先前的设置。初始设置在64位系统上为1 GB,在32位系统上为250 MB。

SetMaxStack 主要用于限制进入无限递归的 goroutines 所造成的破坏。它只会限制未来的堆栈增长。

func SetMaxThreadsSource

func SetMaxThreads(threads int) int

SetMaxThreads 设置 Go 程序可以使用的最大操作系统线程数。如果它试图使用超过这么多,程序崩溃。SetMaxThreads 返回先前的设置。初始设置是10,000个线程。

该限制控制操作系统线程的数量,而不是 goroutines 的数量。Go 程序仅在 goroutine 准备好运行时创建新线程,但由于使用 runtime.LockOSThread,所有现有线程在系统调用,cgo 调用中被阻止,或者被锁定到其他 goroutine 。

SetMaxThreads 主要用于限制创建无限数量线程的程序所造成的损害。这个想法是在取消操作系统之前取消该程序。

func SetPanicOnFaultSource

func SetPanicOnFault(enabled bool) bool

当程序在意外(非零)地址发生故障时,SetPanicOnFault 控制运行时的行为。这种故障通常是由运行时内存损坏等错误引起的,所以默认响应是使程序崩溃。使用内存映射文件的程序或内存的不安全操作可能会导致出现故障的非零地址发生故障; SetPanicOnFault 允许这样的程序请求运行时只触发恐慌,而不是崩溃。SetPanicOnFault 仅适用于当前的 goroutine 。它返回以前的设置。

func SetTracebackSource

func SetTraceback(level string)

SetTraceback 在由于未发现的恐慌或内部运行时错误而退出之前,设置运行时在其打印的回溯中打印的详细信息量。level 参数采用与 GOTRACEBACK 环境变量相同的值。例如,SetTraceback(“all”)确保程序在崩溃时打印所有的 goroutine 。详情请参阅软件包运行时文档。如果 SetTraceback 的调用级别低于环境变量的级别,则调用将被忽略。

func StackSource

func Stack() []byte

Stack 返回调用它的 goroutine 的格式化堆栈跟踪。它调用 runtime.Stack 具有足够大的缓冲区来捕获整个跟踪。

func WriteHeapDumpSource

func WriteHeapDump(fd uintptr)

WriteHeapDump 将堆和其中的对象的描述写入给定的文件描述符。

WriteHeapDump 停止所有 goroutine 的执行,直到堆转储完全写入。因此,文件描述符一定不能连接到另一端在同一个 Go 进程中的管道或套接字; 相反,使用临时文件或网络套接字。

堆转储格式在https://golang.org/s/go15heapdump中定义。

type GCStatsSource

GCStats 收集有关最近垃圾收集的信息。

type GCStats struct {
        LastGC         time.Time       // time of last collection
        NumGC          int64           // number of garbage collections
        PauseTotal     time.Duration   // total pause for all collections
        Pause          []time.Duration // pause history, most recent first
        PauseEnd       []time.Time     // pause end times history, most recent first
        PauseQuantiles []time.Duration
}
Go

Go 是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

主页 https://golang.org/
源码 https://go.googlesource.com/go
发布版本 1.9.2

Go目录

1.档案 | archive
2.缓冲区 | bufio
3.内置 | builtin
4.字节 | bytes
5.压缩 | compress
6.容器 | container
7.上下文 | context
8.加密 | crypto
9.数据库 | database
10.调试 | debug
11.编码 | encoding
12.错误 | errors
13. expvar
14.flag
15. fmt
16. go
17.散列 | hash
18.html
19.图像 | image
20.索引 | index
21.io
22.日志 | log
23.数学 | math
24. math/big
25.math/bits
26.math/cmplx
27.math/rand
28.拟态 | mime
29.net
30.net/http
31. net/mail
32. net/rpc
33.net/smtp
34. net/textproto
35. net/url
36.os
37.路径 | path
38.插件 | plugin
39.反射 | reflect
40.正则表达式 | regexp
41.运行时 | runtime
42.排序算法 | sort
43.转换 | strconv
44.字符串 | strings
45.同步 | sync
46.系统调用 | syscall
47.测试 | testing
48.文本 | text
49.时间戳 | time
50.unicode
51.不安全性 | unsafe
52.Go 语言数据类型
53.Go 语言基础语法
54.Go 语言结构
55.Go 语言 select 语句
56.Go 语言 switch 语句
57.Go 语言 if 语句嵌套
58.Go 语言 if…else 语句
59.Go 语言 if 语句
60.Go 语言运算符
61.Go 语言常量
62.Go 语言函数闭包
63.Go 语言函数作为实参
64.Go 语言函数引用传递值
65.Go 语言函数值传递值
66.Go 语言函数
67.Go 语言 goto 语句
68.Go 语言 continue 语句
69.Go 语言 break 语句
70.Go 语言循环嵌套
71.Go 语言 for 循环
72.Go 语言结构体
73.Go 语言指针作为函数参数
74.Go 语言指向指针的指针
75.Go 语言指针数组
76.Go 语言指针
77.Go 语言向函数传递数组
78.Go 语言多维数组
79.Go 语言变量作用域
80.Go 语言函数方法
81.Go 错误处理
82.Go 语言接口
83.Go 语言类型转换
84.Go 语言递归函数
85.Go 语言Map(集合)
86.Go 语言范围(Range)
87.Go 语言切片(Slice)
88.Go 并发
89.Go fmt.Sprintf 格式化字符串