Golang 找不到/使用 vendor 文件夹

标签 go glide-golang

有没有人知道为什么我在导入 github.com/juju/errors 时在 $GOPATH 和 $GOROOT 前面得到一个 _ 例如

repo 结构

-$GOPATH/src/github.com/codelingo/lexicon/vendor
-$GOPATH/src/github.com/codelingo/lexicon/codelingo/ast/go/src/main.go
-$GOPATH/src/github.com/codelingo/lexicon/codelingo/ast/go/src/node/node.go

main.go 带行号

1 package main
2
3 import (
4   "encoding/json"
5   "fmt"
6   "os"
7   "strings"
8
9   "github.com/juju/errors"
10
11  "./key"
12  "./node"
13  "./parser"
14  "./property"
15  "./util"
16 )
// rest of main.go

带有行号的node.go

1 package node
2
3 import (
4   "encoding/json"
5   "github.com/juju/errors"
6   "reflect"
7)
//rest of node.go

$ go run main.go 
node/node.go:5:2: cannot find package "_/home/jzhu/go/src/github.com/codelingo/lexicon/codelingo/ast/go/src/vendor/github.com/juju/errors" in any of:
    /usr/local/go/src/_/home/jzhu/go/src/github.com/codelingo/lexicon/codelingo/ast/go/src/vendor/github.com/juju/errors (from $GOROOT)
    /home/jzhu/go/src/_/home/jzhu/go/src/github.com/codelingo/lexicon/codelingo/ast/go/src/vendor/github.com/juju/errors (from $GOPATH)

vendor 文件夹包含上述包,main.go 可以使用它(例如 import ("github.com/juju/errors"))。

vendor文件夹在我的$GOPATH(/home/jzhu/go)下

注意:包路径前有个奇怪的“_”。

我期待着下面的内容来查看 vendor 树。

vendor/github.com/codelingo/lingo/service/server/service.go:10:2: cannot find package "github.com/codelingo/platform/controller/graphdb/query/result" in any of:
    /home/jzhu/go/src/github.com/codelingo/platform/vendor/github.com/codelingo/platform/controller/graphdb/query/result (vendor tree)
    /home/jzhu/go/src/github.com/vendor/github.com/codelingo/platform/controller/graphdb/query/result
    /usr/local/go/src/github.com/codelingo/platform/controller/graphdb/query/result (from $GOROOT)
    /home/jzhu/go/src/github.com/codelingo/platform/controller/graphdb/query/result (from $GOPATH)

环境:

$go env

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/jzhu/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build894537960=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
PKG_CONFIG="pkg-config"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"

$ go version
go version go1.8.3 linux/amd64

$ glide --version
glide version 0.13.0-dev

最佳答案

解决方法是在import中使用正确的相对路径进行打包。 例如 import "github.com/codelingo/lexicon/codelingo/ast/go/src/node" 而不是 main.go 中的 import "./node"

https://github.com/Masterminds/glide/issues/602

关于Golang 找不到/使用 vendor 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208854/

相关文章:

go - 关闭已完成的 channel 后,goroutine中缺少打印内容

go - 当范围超过 JSON 数组时无法迭代所有索引

go - nginx 502 错误始终存在,没有应用程序错误

image - Go - 将 base64 字符串保存到文件

linux - arm 上的 autocert 中缺少字段或方法签名方案

go - 内置源代码位置

go - 使用 glide 安装 go-ethereum 依赖项和 tendermint 依赖项

go - 尝试在 golang 中使用 io.CopyN() 读取时客户端卡住了

xml - 如何将数据映射转换为XML文件

go - 从 slice 中选择随机值并在 cli 上打印