Closed
Description
What version of Go are you using (go version
)?
$ go version go version devel +2ac1ca9160 Tue Dec 3 15:26:50 2019 +0000 darwin/amd64
Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/Users/jayconrod/Library/Caches/go-build" GOENV="/Users/jayconrod/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOINSECURE="" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/jayconrod/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/Users/jayconrod/Code/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/Users/jayconrod/Code/go/pkg/tool/darwin_amd64" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/Users/jayconrod/Code/go/src/cmd/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/rq/x0692kqj6ml8cvrhcqh5bswc008xj1/T/go-build021162515=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
go run main.go
! stdout '^fmt$'
-- main.go --
package main
import (
"fmt"
"go/build"
"log"
"os"
"path/filepath"
"strings"
)
func main() {
ctxt := new(build.Context)
*ctxt = build.Default
ctxt.CgoEnabled = false
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
aDir := filepath.Join(wd, "a")
p, err := ctxt.ImportDir(aDir, 0)
if err != nil {
log.Fatal(err)
}
fmt.Println(strings.Join(p.Imports, "\n"))
}
-- a/cgo_enabled.go --
package a
import "C"
import _ "fmt"
-- a/empty.go --
package a
What did you expect to see?
The test script fails.
fmt
should not appear in the output. It's only imported by cgo_enabled.go
, which contains import "C"
. This file is ignored because ctxt.CgoEnabled
is false
. Its imports should be ignored, too.
Note that if we add // +build cgo
to cgo_enabled.go
, the imports from that file are not included in the output.
What did you see instead?
The test script should pass.
This can be tested more concisely with go list -f {{.Imports}} ./a
. The root cause of the issue is in go/build
though.