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