gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:40:50 25 4
gpt4 key购买 nike

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

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

清理从 go get 克隆的任何 repos 的 gopath,然后运行 ​​glide update 然后 go build main.go 生成一个二进制文件大小为 2457328 字节。

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

使用的软件版本

glide version 0.13.1
go version go1.10.3 darwin/amd64

主.go

package main

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

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

滑行.yaml

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

最佳答案

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

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

尝试通过告诉 go build 排除这样的调试信息来比较构建二进制文件的大小。

go build -ldflags=-s ./

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

(编辑:当不包括调试信息时源文件路径也包括在内,并且来自 panic() 的堆栈跟踪证明了这一点,所以这个答案是不完整的)

关于go - 为什么在使用 vendor 目录中的依赖项与 gopath 中的依赖项构建时,go 应用程序二进制文件的大小不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com