为什么在某些项目上重新运行go build ./
每次都会产生不同的结果?为什么每次重建都会更改二进制文件?
例如:
$ cd go/src/github.com/google/cadvisor
$ go build ./
$ sh1sum cadvisor
cdfc3c38898e2decd5df35b661737f7cc4f514ed cadvisor
$ go build ./
$ sha1sum cadvisor
a94db96d684225e7a45cc68c5341fe6f57897c23 cadvisor
全分离的设置:
$ go version
go version go1.6.2 linux/amd64
$ export GOPATH=$(mktemp -d)
$ cd $GOPATH
$ go get github.com/tools/godep
$ go get github.com/google/cadvisor
package github.com/influxdb/influxdb/client: code in directory /tmp/tmp.2MxFdNmdDe/src/github.com/influxdb/influxdb/client expects import "github.com/influxdata/influxdb/client"
$ cd src/github.com/google/cadvisor
$ $GOPATH/bin/godep restore
godep: WARNING: Go version (go1.6) & $GO15VENDOREXPERIMENT= wants to enable the vendor experiment, but disabling because a Godep workspace (Godeps/_workspace) exists
$ go build ./
...
从未使用过,但我怀疑这种行为是故意的。我已经在一个地方工作过,每次我们得到一个编译好的Win32 MFC应用程序时,这个二进制文件就会有意地不同。原因是当客户请求源代码时,可能会触及我们的责任和责任。通常情况下不会发生这种情况,因为客户希望源代码的主要原因不是维护它,而是为了让我们破产,软件生产商 – sergiol
如果go是故意为构建添加变体,我会期望它总是改变。但情况并非如此,因为一个小的“hello world”风格的程序在重新编译时会产生相同的二进制文件。 –