Without modules, the go tool informs me that I'm trying to build a package with no Go files:
$ go1.11rc1 build ./vcs-test
can't load package: package golang.org/x/build/vcs-test: no Go files in /Users/filippo/src/golang.org/x/build/vcs-test
With modules, I get an obscure error:
$ GO111MODULE=on go1.11rc1 build ./vcs-test
go: finding golang.org/x/build/vcs-test latest
can't load package: package golang.org/x/build/vcs-test: unknown import path "golang.org/x/build/vcs-test": cannot find module providing package golang.org/x/build/vcs-test
Note that this relatively unhelpful error message still occurs with 1.11.4 and 1.12beta1.
# Failing example. There are no .go files (and hence no package) in the same directory
# as the main `go.mod` file.
mkdir -p /tmp/scratchpad/bitbucket-module-bad
cd /tmp/scratchpad/bitbucket-module-bad
go mod init bitbucket.org/foo/bar
mkdir baz
cat <<EOF > baz/baz.go
package baz
func Hello() string { return "Hello from bitbucket.org/foo/bar/baz" }
EOF
cd /tmp/scratchpad/bitbucket-module-bad
go build -v
Fails with:
$ go build -v
Fetching https://bitbucket.org?go-get=1
Parsing meta tags from https://bitbucket.org?go-get=1 (status code 200)
can't load package: package bitbucket.org/foo/bar: unknown import path "bitbucket.org/foo/bar":
cannot find module providing package bitbucket.org/foo/bar
One solution (as covered in an FAQ on the modules wiki) is go build ./... or other variations.
CC @myitcv @bcmills @heschik
I have been writing Go (it was the first language I really learned well) and so ./... seemed normal to me, but I was recently helping a very experienced C# engineer on board onto my team. We were pair-programming and we came across this issue and I used go install ./... and he was a little weirded out but thought it was easy to remember but was unintuitive.
Perhaps ./... could be the default if GO111MODULE=on or there's a go.mod file in the current directory?
Failing that, the error message could use some work. can't load package: package projectname: unknown import path "projectname": cannot find module providing package projectname doesn't suggest to me "You forgot to specify which module to compile, maybe with ./...".
I was following a tutorial for something (gRPC) and the tutorial makes use of modules, so I got to learn about them too \o/
However I had an issue where I had made a mistake and the error message from go build was not very helpful.
Below is pasted the file tree, the root go.mod, the code that was generating the error, the command being executed and the error message. The error turned out to be that the import path was pointed at a directory with no go source files, but the error reported was "cannot find module providing package"
.
.
โโโ go.mod
โโโ go.sum
โโโ part_1
โโโ api
โ โโโ proto
โ โโโ v1
โ โโโ todo-service.proto
โโโ cmd
โ โโโ client-grpc
โ โ โโโ client-grpc
โ โ โโโ main.go
โ โโโ server
โ โโโ main.go
โโโ create_todo_table.sql
โโโ go.sum
โโโ pkg
โ โโโ api
โ โ โโโ v1
โ โ โโโ todo-service.pb.go
โ โโโ cmd
โ โ โโโ server
โ โ โโโ server.go
โ โโโ protocol
โ โ โโโ grpc
โ โ โโโ server.go
โ โโโ service
โ โโโ v1
โ โโโ todo-service.go
โ โโโ todo-service_test.go
โโโ third_party
โโโ google
โโโ protobuf
โโโ any.proto
โโโ api.proto
โโโ compiler
โ โโโ plugin.proto
โโโ descriptor.proto
โโโ duration.proto
โโโ empty.proto
โโโ field_mask.proto
โโโ source_context.proto
โโโ struct.proto
โโโ timestamp.proto
โโโ type.proto
โโโ wrappers.proto
20 directories, 25 files
=======================================
~/go/src/shane/go.mod
module shane
require (
github.com/DATA-DOG/go-sqlmock v1.3.3
github.com/go-sql-driver/mysql v1.4.1
github.com/golang/protobuf v1.3.1
google.golang.org/grpc v1.21.0
)
========================================
~/go/src/shane/part_1/cmd/server
package main
import (
"fmt"
"os"
"shane/part_1/pkg/cmd"
)
func main() {
if err := cmd.RunServer(); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
}
========================================
go build . # inside ~/go/src/shane/part_1/cmd/server
main.go:7:2: unknown import path "shane/part_1/pkg/cmd": cannot find module providing package shane/part_1/pkg/cmd
Change https://golang.org/cl/185345 mentions this issue: cmd/go: rationalize errors in internal/load and internal/modload
This appears to be fixed at head.
~/src/golang.org/x/build$ gotip version
go version devel +0915a19a Fri Dec 6 05:12:15 2019 +0000 linux/amd64
~/src/golang.org/x/build$ GO111MODULE=on gotip build ./vcs-test
can't load package: package ./vcs-test: no Go files in /usr/local/google/home/bcmills/src/golang.org/x/build/vcs-test
~/src/golang.org/x/build$ GO111MODULE=off gotip build ./vcs-test
can't load package: package golang.org/x/build/vcs-test: no Go files in /usr/local/google/home/bcmills/src/golang.org/x/build/vcs-test
Most helpful comment
Note that this relatively unhelpful error message still occurs with 1.11.4 and 1.12beta1.
Fails with:
One solution (as covered in an FAQ on the modules wiki) is
go build ./...or other variations.CC @myitcv @bcmills @heschik