【问题标题】:When building Go programs for release is it standard practice to just use 'go build'?在为发布构建 Go 程序时,仅使用“go build”是标准做法吗?
【发布时间】:2015-04-23 09:48:03
【问题描述】:

在构建 Go 程序以进行发布时,仅使用 go build 而不使用任何其他选项是标准做法吗?我问是因为在使用go build 构建时,默认情况下会包含所有调试信息。要删除它,您可以将选项传递给链接器,因此:

go build -ldflags "-w" prog.go

这将省略所有调试符号。在构建发布程序时,您会删除这些信息还是保持原样?

编辑:为了清楚起见,我想知道人们如何编译 Go 程序以部署到实时环境。在其他编译语言中,您有一组不同的编译器命令行选项用于调试和发布版本,而发布版本通常会优化可执行文件并删除调试信息。

【问题讨论】:

  • 从 Go 程序中删除调试信息可能会破坏反射的某些用途。你不应该使用那个标志。
  • 取决于您的用例。对于部署到我自己的服务器,我猜这是绝大多数 Go 用户的部署方式——你真的不应该这样做。它实际上没有给你任何东西,并且会阻止服务器上的调试和一些反射的东西。
  • @FUZxxl 反射有什么用?一切似乎都很好。 reddit.com/r/golang/comments/2woogl/…
  • 普通的go build 是常态。当你go get 某事时它会运行;直到今天我才知道-ldflags -w; Go 通常的规范是不要为了一点点调整而使事情复杂化。我怀疑它会产生巨大的影响(静态链接是大型二进制文件的主要原因);并且对剥离符号的反应似乎普遍消极on this golang-nuts thread
  • Going by this old thread 我认为-s 必须为运行时保留一些数据(因此剥离甚至不能完全剥离)。此外,Reddit 上的用户 davecheney 表示仅使用“go build”是标准做法,并且是 Go 项目的提交者之一,所以相信他。 :)

标签: go compilation release


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2017-04-20
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多