你正在使用的Go版本是( go version
)?
$ go version
go version go1.18rc1 windows/amd64
这个问题在最新的版本中是否会重现?
N/A
你正在使用的操作系统和处理器架构是( go env
)?go env
输出
$ go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\max\AppData\Local\go-build
set GOENV=C:\Users\max\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\max\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\max\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Users\max\sdk\go1.18rc1
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Users\max\sdk\go1.18rc1\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.18rc1
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\max\Code\go-vcs-issue-repro\go.mod
set GOWORK=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\max\AppData\Local\Temp\go-build2053103368=/tmp/go-build -gno-record-gcc-switches
你做了什么?
git clone https://github.com/mlcdf/go-vcs-issue-repro.git
cd go-vcs-issue-repro
go1.18rc1 build main.go
.\main.exe
你期望看到什么?
控制台出现VCS信息:
[{-compiler gc} {CGO_ENABLED 1} {CGO_CFLAGS } {CGO_CPPFLAGS } {CGO_CXXFLAGS } {CGO_LDFLAGS } {GOARCH amd64} {GOOS windows} {GOAMD64 v1} {vcs git} {vcs.revision 2d1c081410d0f5f23fd1dd7e08794041955a2119} {vcs.time 2022-02-20T11:01:47Z} {vcs.modified false}]
你看到了什么?
[{-compiler gc} {CGO_ENABLED 1} {CGO_CFLAGS } {CGO_CPPFLAGS } {CGO_CXXFLAGS } {CGO_LDFLAGS } {GOARCH amd64} {GOOS windows} {GOAMD64 v1}]
如果我运行 go1.18rc1 build
而不是 go1.18rc1 build main.go
并运行 .\go-vcs-issue-repro.exe
可执行文件,它可以正常工作。这是预期的行为吗?
6条答案
按热度按时间3duebb1j1#
CC @bcmills@matloob
cetgtptt2#
通常情况下,我们只在工作区的模块中对VCS元数据进行标记:
https://cs.opensource.google/go/go/+/master:src/cmd/go/internal/load/pkg.go;l=2362;drc=master
自从 CL 339170 (CC @matloob) 之后,由源文件列表构建的伪包不被认为是在一个模块中,因为它的源文件通常不能保证被
go mod tidy
或go mod vendor
扫描。也许我们可以调整这个检查,改为将包的目录与包含工作区模块的目录进行比较。
l7mqbcuq3#
没有看到VCS元数据也被填充为
go 1.19.2 darwin/amd64
。kr98yfug4#
bug仍然存在于
go version go1.20.4 linux/arm64
:只有在调用go build
时使用目录的完整路径,而不是*.go文件的相对路径,才会显示vcs*
。bqucvtff5#
@agmt, @module17:由于此问题仍处于打开状态,因此它仍然存在并不令人惊讶。
如果您想为此提供修复方案,请查看 https://go.dev/doc/contribute 。
xiozqbni6#
https://go.dev/cl/541777提到了这个问题:
cmd/go: stamp VCS info when building .go files directly