首页 > 解决方案 > golang供应商路径找不到包

问题描述

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

案例 1:如果上面的 repo 签出到$GOPATH/src/github.com/tarm/serial.

案例 2:如果 repo$GOPATH/src/vendor/github.com/tarm/serialgo build命令下移动会抱怨cannot find package "github.com/tarm/serial

案例 3:其他 SO 答案建议将其放在下面./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,构建将成功。

标签: gogopathgovendor

解决方案


Go 工具链希望您的项目植根于GOPATH/src. 如果testdir是您项目的根目录,则它需要位于GOPATH/src/testdir,而不是位于~/testdir。然后,如果您将依赖项签出到GOPATH/src/testdir/vendor中,您将获得您正在寻找的行为。请参阅入门


推荐阅读