golang错误报告函数如何获取编译信息

时间:2015-05-27 11:39:16

标签: go

函数如何从运行时建立以下详细信息,以便它可以将错误报告作为错误库的一部分进行编写,以便在许多产品中使用(我们正在转换为golang):

  • 可执行文件的编译日期和时间
  • 用于创建可执行文件的编译机器

我希望能够检索这两个以扩充我可以报告的各种文件修订号以及一些堆栈跟踪信息

有用的相关但偏离主题的信息:
  - 您可以从运行时获取堆栈跟踪,如此处所示http://technosophos.com/2014/03/19/generating-stack-traces-in-go.html
  - 反射包http://golang.org/pkg/reflect/可用于检查已识别的功能

感谢您的协助,
理查德

1 个答案:

答案 0 :(得分:5)

在构建时,可以使用-X链接器标志设置字符串变量的值:

go build -ldflags "-X main.Uname '$(uname -a)' -X main.CompileTime '$(date)'"

使用这样的命令,这段代码

package main

import "fmt"

// Set by the linker.
var CompileTime, Uname string

func main() {
    fmt.Println(Uname)
    fmt.Println(CompileTime)
}

将打印类似

的内容
Linux user 3.13.0-53 Wed May 20 10:34:39 UTC 2015 x86_64 GNU/Linux
Wed May 27 12:00:00 UTC 2015

有关详细信息,请参阅linker docs