golang供应商路径找不到包

时间:2018-09-20 20:33:45

标签: go gopath govendor

我正在从github.com/tarm/serial构建示例程序。

情况1:如果将上述存储库检出到$GOPATH/src/github.com/tarm/serial中,则编译成功。

情况2:如果将回购移至$GOPATH/src/vendor/github.com/tarm/serial下,则go build命令将投诉cannot find package "github.com/tarm/serial

情况3:other SO answers建议将其放置在./vendor下,以便包装位于./vendor/github.com/tarm/serial处。那也不行。

go版本是1.10.4。我认为看到建议案例2或案例3的页面应该在过去的不同时间工作。有什么改变吗?您需要以某种方式启用供应商功能吗?

详细信息:

失败的命令

gotester:~/testdir$ go build uarttest_main.go
uarttest_main.go:5:9: cannot find package "github.com/tarm/serial" in any of:
    /home/gotester/bin/go/src/github.com/tarm/serial (from $GOROOT)
    /home/gotester/testdir/libs/src/github.com/tarm/serial (from $GOPATH)

位于./的源代码:

gotester:~/testdir$ cat uarttest_main.go
package main

import (
        "log"
        "github.com/tarm/serial"
)

func main() {
        c := &serial.Config{Name: "COM45", Baud: 115200}
        s, err := serial.OpenPort(c)
        if err != nil {
                log.Fatal(err)
        }

        n, err := s.Write([]byte("test"))
        if err != nil {
                log.Fatal(err)
        }

        buf := make([]byte, 128)
        n, err = s.Read(buf)
        if err != nil {
                log.Fatal(err)
        }
        log.Printf("%q", buf[:n])
}

./vendor目录:

gotester:~/testdir$ tree --charset=ascii ./vendor
./vendor
`-- github.com
    `-- tarm
        `-- serial
            |-- basic_test.go
            |-- LICENSE
            |-- README.md
            |-- serial.go
            |-- serial_linux.go
            |-- serial_posix.go
            `-- serial_windows.go

3 directories, 7 files

如果立即运行以下命令:mv ./vendor/github.com ./libs/src,构建将成功。

1 个答案:

答案 0 :(得分:1)

Go工具链希望您的项目植根于GOPATH/src。如果testdir是项目的根目录,则它必须位于GOPATH/src/testdir,而不是~/testdir。然后,如果您的依存关系已签入GOPATH/src/testdir/vendor,则将获得所需的行为。参见Getting started