Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/go: go list complains about "missing dot" with unknown imports #33807

Closed
hajimehoshi opened this issue Aug 23, 2019 · 10 comments

Comments

@hajimehoshi
Copy link
Contributor

commented Aug 23, 2019

What version of Go are you using (go version)?

$ go1.13rc1 version
go version go1.13rc1 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/hajimehoshi/Library/Caches/go-build"
GOENV="/Users/hajimehoshi/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/hajimehoshi/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/hajimehoshi/sdk/go1.13rc1"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/hajimehoshi/sdk/go1.13rc1/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
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/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/go-build377164815=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

go1.13rc1 test -v -run=TestClasses -count=1 golang.org/x/mobile/bind/java/

In order to reproduce the problem, the change https://go-review.googlesource.com/c/mobile/+/190479 is required on my local machine to force to use the patched gomobile/gobind. This CL changes $PATH order to use the guilt gomobile/gobind.

What did you expect to see?

The test passes

What did you see instead?

$ go1.13rc1 test -v -run=TestClasses -count=1 ./bind/java/
=== RUN   TestClasses
--- FAIL: TestClasses (5.07s)
    seq_test.go:124: tmpdir = /var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/bind-java-seq-test-724090206
    seq_test.go:145: /var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/bind-java-test-401428283/gomobile: /var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/bind-java-test-401428283/gobind -lang=go,java -outdir=/var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/gomobile-work-069256369 -tags=aaa,bbb golang.org/x/mobile/bind/testdata/testpkg/javapkg failed: exit status 1                                                                                                             
        type-checking package "golang.org/x/mobile/bind/testdata/testpkg/javapkg" failed (/Users/hajimehoshi/go/src/golang.org/x/mobile/bind/testdata/testpkg/javapkg/classes.go:8:2: could not import Java/java/beans (go/build: importGo Java/java/beans: exit status 1
        can't load package: package Java/java/beans: malformed module path "Java/java/beans": missing dot in first path element                                                                                                              

        ))


    seq_test.go:146: failed to run gomobile bind: exit status 1
FAIL
FAIL    golang.org/x/mobile/bind/java   6.361s
FAIL

This is actually what the try bots are complaining. (Apparently the try bots use Go 1.13 or later).

CC @hyangah

@hajimehoshi hajimehoshi changed the title mobile: test fails with Go 1.13 x/mobile: test fails with Go 1.13 Aug 23, 2019

@gopherbot gopherbot added this to the Unreleased milestone Aug 23, 2019

@gopherbot gopherbot added the mobile label Aug 23, 2019

@gopherbot

This comment has been minimized.

Copy link

commented Aug 23, 2019

Change https://golang.org/cl/191657 mentions this issue: all: use GOROOT/bin/go instead of go

@hajimehoshi

This comment has been minimized.

Copy link
Contributor Author

commented Aug 23, 2019

Inserted a panic at the Go compiler like:

--- a/src/cmd/go/internal/module/module.go
+++ b/src/cmd/go/internal/module/module.go
@@ -184,6 +184,7 @@ func CheckPath(path string) error {
                return fmt.Errorf("malformed module path %q: leading slash", path)
        }
        if !strings.Contains(path[:i], ".") {
+               panic("!?")
                return fmt.Errorf("malformed module path %q: missing dot in first path element", path)
        }
        if path[0] == '-' {

then get the result:

=== RUN   TestClasses
--- FAIL: TestClasses (9.05s)
    seq_test.go:124: tmpdir = /var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/bind-java-seq-test-129829619
    seq_test.go:145: /var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/bind-java-test-554361572/gomobile: /var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/bind-java-test-554361572/gobind -lang=go,java -outdir=/var/folders/ht/ky_bwgzs4bd5z1hh02k34x_h0000gn/T/gomobile-work-831800625 -tags=aaa,bbb golang.org/x/mobile/bind/testdata/testpkg/javapkg failed: exit status 1                                                                                                             
        2019/08/24 04:27:30 go [list -e -json -compiled=true -test=false -export=false -deps=true -find=false -tags aaa bbb -- golang.org/x/mobile/bind/testdata/testpkg/javapkg]: exit status 2: go: finding golang.org/x/mobile latest     
        panic: !?

        goroutine 251 [running]:
        cmd/go/internal/module.CheckPath(0xc000686521, 0x17, 0x24ceff1eea4b52ca, 0x164987f)
                /Users/hajimehoshi/go-code/src/cmd/go/internal/module/module.go:187 +0x567
        cmd/go/internal/module.EncodePath(0xc000686521, 0x17, 0xc000234180, 0x0, 0x0, 0xc000432700)
                /Users/hajimehoshi/go-code/src/cmd/go/internal/module/module.go:528 +0x39
        cmd/go/internal/modfetch.newProxyRepo(0x164987f, 0x18, 0xc000686521, 0x17, 0xc0001e4300, 0xc0004328b0, 0x1077040, 0x1ab1b20)                                                                                                         
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modfetch/proxy.go:185 +0x1f2
        cmd/go/internal/modfetch.lookup(0x164987f, 0x18, 0xc000686521, 0x17, 0x15589a0, 0xc0000d0060, 0x3201b28, 0xc0005981c0)                                                                                                               
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modfetch/repo.go:237 +0x1c5
        cmd/go/internal/modfetch.Lookup.func1(0x1ab1b20, 0x15c0fa0)
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modfetch/repo.go:201 +0x57
        cmd/go/internal/par.(*Cache).Do(0x1ab1b20, 0x15c0fa0, 0xc0005981a0, 0xc000432970, 0x4db0ddc2f17fd781, 0x5c6e9f7c6e2ac3fe)                                                                                                            
                /Users/hajimehoshi/go-code/src/cmd/go/internal/par/work.go:128 +0xec
        cmd/go/internal/modfetch.Lookup(0x164987f, 0x18, 0xc000686521, 0x17, 0x4080401000f0000, 0x8d5738e79f2c0001, 0x66f997546da3a0cd, 0x909b8221453f3f14)                                                                                  
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modfetch/repo.go:200 +0xea
        cmd/go/internal/modload.queryProxy(0x164987f, 0x18, 0xc000686521, 0x17, 0x163a23a, 0x6, 0x0, 0x0, 0x1681610, 0xc00019a360, ...)                                                                                                      
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modload/query.go:196 +0x148
        cmd/go/internal/modload.QueryPattern.func3.1(0xc000686521, 0x17, 0xc000686521, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)                                                                                                              
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modload/query.go:372 +0xda
        cmd/go/internal/modload.queryPrefixModules.func1(0xc000246190, 0xc000644140, 0xc000686521, 0x17, 0xc000594dc0)
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modload/query.go:442 +0x55
        created by cmd/go/internal/modload.queryPrefixModules
                /Users/hajimehoshi/go-code/src/cmd/go/internal/modload/query.go:441 +0x12b

    seq_test.go:146: failed to run gomobile bind: exit status 1
@hajimehoshi

This comment has been minimized.

Copy link
Contributor Author

commented Aug 23, 2019

go1.13rc1 list -e -json -compiled=true -test=false -export=false -deps=true -find=false -tags "aaa bbb" -- golang.org/x/mobile/bind/testdata/testpkg/javapkg

outputs a JSON with Err columns:

{
        "ImportPath": "Java/java/beans",
        "DepOnly": true,
        "Incomplete": true,
        "Stale": true,
        "StaleReason": "build ID mismatch",
        "Error": {
                "ImportStack": [
                        "golang.org/x/mobile/bind/testdata/testpkg/javapkg",
                        "Java/java/beans"
                ],
                "Pos": "bind/testdata/testpkg/javapkg/classes.go:8:2",
                "Err": "malformed module path \"Java/java/beans\": missing dot in first path element"
        }
}
{
        "ImportPath": "Java/java/io",
        "DepOnly": true,
        "Incomplete": true,
        "Stale": true,
        "StaleReason": "build ID mismatch",
        "Error": {
                "ImportStack": [
                        "golang.org/x/mobile/bind/testdata/testpkg/javapkg",
                        "Java/java/io"
                ],
                "Pos": "bind/testdata/testpkg/javapkg/classes.go:9:2",
                "Err": "malformed module path \"Java/java/io\": missing dot in first path element"
        }
}
...
@hajimehoshi

This comment has been minimized.

Copy link
Contributor Author

commented Aug 24, 2019

go list with javapkg

go1.13rc1 list -json -deps=true -- golang.org/x/mobile/bind/testdata/testpkg/javapkg

results in

{
        "ImportPath": "Java/java/beans",
        "DepOnly": true,
        "Incomplete": true,
        "Stale": true,
        "StaleReason": "build ID mismatch",
        "Error": {
                "ImportStack": [
                        "golang.org/x/mobile/bind/testdata/testpkg/javapkg",
                        "Java/java/beans"
                ],
                "Pos": "bind/testdata/testpkg/javapkg/classes.go:8:2",
                "Err": "malformed module path \"Java/java/beans\": missing dot in first path element"
        }
}
{
        "ImportPath": "Java/java/io",
        "DepOnly": true,
        "Incomplete": true,
        "Stale": true,
        "StaleReason": "build ID mismatch",
        "Error": {
                "ImportStack": [
                        "golang.org/x/mobile/bind/testdata/testpkg/javapkg",
                        "Java/java/io"
                ],
                "Pos": "bind/testdata/testpkg/javapkg/classes.go:9:2",
                "Err": "malformed module path \"Java/java/io\": missing dot in first path element"
        }
}

go list with a Go file with unknown imports

package main

import "foo"

func main() {}

and

go1.13rc1 list -json -deps=true -- ./foo.go

results in

build command-line-arguments: cannot load foo: malformed module path "foo": missing dot in first path element

@hajimehoshi hajimehoshi changed the title x/mobile: test fails with Go 1.13 cmd/go: go list complains about "missing dot" with unknown imports Aug 24, 2019

@bcmills

This comment has been minimized.

Copy link
Member

commented Aug 26, 2019

It looks like the underlying problem here is that you're trying to use gomobile in module mode. That doesn't work yet in general (see #27234).

@bcmills

This comment has been minimized.

Copy link
Member

commented Aug 26, 2019

The error message here is correct: go get in module mode does not know how to resolve a missing import path that does not contain a dot, since that is not a valid FQDN.

@bcmills

This comment has been minimized.

Copy link
Member

commented Aug 26, 2019

Duplicate of #27234

@bcmills bcmills marked this as a duplicate of #27234 Aug 26, 2019

@bcmills bcmills closed this Aug 26, 2019

@hajimehoshi

This comment has been minimized.

Copy link
Contributor Author

commented Aug 26, 2019

OK, so we might need to fix Go itself for reverse binding. @hyangah , what do you think?

@hajimehoshi

This comment has been minimized.

Copy link
Contributor Author

commented Aug 26, 2019

Let's continue discussion at #27234 (comment)

@hyangah

This comment has been minimized.

Copy link
Contributor

commented Aug 26, 2019

I think in the module mode, we should generate this fake packages inside the main module so go list knows they don't need to be resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants
You can’t perform that action at this time.