爲什麼在某些項目上重新運行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」風格的程序在重新編譯時會產生相同的二進制文件。 –