🌝

Go 环境变量

Posted at — May 21, 2022

go 的 runtime 包提供一些控制 Go 程序运行时的操作,其中包括 go 环境变量1

GOTRACEBACK

GOTRACEBACK 环境变量用于控制当 Go 程序 panic 时输出栈信息的多少。变量值可以为:

修改 GOTRACEBACK 有两种方式,通过 runtime/debug 包在代码里修改:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
	"runtime/debug"
	"time"
)

func main() {
	debug.SetTraceback("crash")
	
	go func() {
		for {
			println("go routine")
			time.Sleep(time.Second)
			var i *int
			*i=0
		}
	}()

	for {
		println("main func")
		time.Sleep(time.Second)
	}
}

或者在程序启动时修改:

1
GOTRACEBACK=crash go run main.go

注意,通过 os.Setenv 来设置是无效的,因为程序以及启动了,设置太晚了2

1
2
3
4
5
func main() {
    os.Setenv("GOTRACEBACK", "crash")
	
    ...
}