为什么在使用供应商目录中的依赖项与gopath中的依赖项进行构建时,go应用程序二进制文件的大小不同?

转让:

我在干净的gopath中有一个main.go文件和一个glide.yaml文件(请参见下面的源代码)(没有其他存储库)

go get -u ./...然后运行go build main.go生成大小为2377872字节的二进制文件。

清除从中克隆的任何存储库的gopath go get并运行,glide update然后go build main.go生成大小为2457328字节的二进制文件。

如果没有代码更改,为什么二进制文件大小不同?有什么go build不同之处?为什么拥有供应商目录(或没有供应商目录)会影响此大小?

使用的软件版本

glide version 0.13.1
go version go1.10.3 darwin/amd64

main.go

package main

import (
    log "github.com/sirupsen/logrus"
)

func main () {
    log.WithFields(log.Fields{
        "qqs": "q1",
    }).Info("Why are binaries different?")
}

glide.yaml

package: github.com/chuyval/qqs/q1
import:
- package: github.com/sirupsen/logrus
  version: 1.0.6
svsd:

go build 默认情况下,调试信息包含在可执行文件中,包括源代码文件的路径。

当您有vendor/目录时,源文件的路径将比源文件位于其中的路径长GOPATH结果,调试信息将占用更多空间。

尝试通过告知go build排除调试信息来比较生成的二进制文件的大小,如下所示。

go build -ldflags=-s ./

这减小了尺寸上的差异。有关链接器标志的更多详细信息,请参见https://golang.org/cmd/link/

(编辑:当不包括调试信息时会包括源文件路径,并且通过的堆栈跟踪也可以证明panic(),因此此答案不完整)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章