首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在go 1.7中与供应商解决“找不到包”错误

在go 1.7中与供应商解决“找不到包”错误
EN

Stack Overflow用户
提问于 2017-01-11 11:12:30
回答 1查看 3.2K关注 0票数 1

我有一个项目结构如下:-

代码语言:javascript
运行
复制
session-service
    _libs   //Contains all the external dependencies
    api
    constants
    exceptions
    idgen
    jsonDecoder
    log
    model
    monitor
    persistence
    redis
    routes
    src/bddtest/servicetest
    util

_libs的内容如下:

代码语言:javascript
运行
复制
github.com 
golang.org 
    x
        net
gopkg.in

我的Makefile看起来如下:-

代码语言:javascript
运行
复制
.PHONY: deploy

LOGLEVEL ?= 1
CONFIGFILE ?= 2
GOFLAGS ?= $(GOFLAGS:)

PWD = $(shell pwd)
export GOPATH = $(shell echo $$GOPATH):$(PWD)/_libs:$(PWD)
export GOBIN = $(PWD)/bin
export GOROOT = $(shell echo $$GOROOT)

deploy: clean build install 

build:
    @rm -rf pkg/ 2>/dev/null
    @rm -rf _libs/pkg/ 2>/dev/null
    @go build $(GOFLAGS) ./...

install:
    @go install ./...

clean:
    @go clean $(GOFLAGS) -i ./...


## EOF

一切都很好。现在我正在考虑搬到vendor。因此,我将我的_libs重命名为vendor,并修改了我的Makefile如下:

代码语言:javascript
运行
复制
export GOPATH = $(shell echo $$GOPATH):$(PWD)

但在这之后,我开始犯以下错误:-

代码语言:javascript
运行
复制
vendor/golang.org/x/net/html/charset/charset.go:20:2: cannot find package "golang.org/x/text/encoding" in any of:
        /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding (vendor tree)
        /usr/local/go/src/golang.org/x/text/encoding (from $GOROOT)
        /Users/debraj/golang/src/golang.org/x/text/encoding (from $GOPATH)
        /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding
    vendor/golang.org/x/net/html/charset/charset.go:21:2: cannot find package "golang.org/x/text/encoding/charmap" in any of:
        /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/charmap (vendor tree)
        /usr/local/go/src/golang.org/x/text/encoding/charmap (from $GOROOT)
        /Users/debraj/golang/src/golang.org/x/text/encoding/charmap (from $GOPATH)
        /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/charmap
    vendor/golang.org/x/net/html/charset/charset.go:22:2: cannot find package "golang.org/x/text/encoding/htmlindex" in any of:
        /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/htmlindex (vendor tree)
        /usr/local/go/src/golang.org/x/text/encoding/htmlindex (from $GOROOT)
        /Users/debraj/golang/src/golang.org/x/text/encoding/htmlindex (from $GOPATH)
        /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/htmlindex
    vendor/golang.org/x/net/html/charset/charset.go:23:2: cannot find package "golang.org/x/text/transform" in any of:
        /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/transform (vendor tree)
        /usr/local/go/src/golang.org/x/text/transform (from $GOROOT)
        /Users/debraj/golang/src/golang.org/x/text/transform (from $GOPATH)
        /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/transform
    vendor/golang.org/x/net/http2/h2i/h2i.go:38:2: cannot find package "golang.org/x/crypto/ssh/terminal" in any of:
        /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/crypto/ssh/terminal (vendor tree)
        /usr/local/go/src/golang.org/x/crypto/ssh/terminal (from $GOROOT)
        /Users/debraj/golang/src/golang.org/x/crypto/ssh/terminal (from $GOPATH)
        /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/crypto/ssh/terminal

环境:-

  • go版本go1.7.3达尔文/amd64 64
  • Mac 10.11.6

有谁能让我知道为什么我在vendor中得到了上面的错误,但是_libs的一切都很好

更新

在我的本地,$(go list ./... | grep -v /vendor/)输出中的换行符引起了一些问题。为了解决这个问题,我必须修改jimb的解决方案。我在Makefile PKG = $(shell go list ./... | grep -v /vendor/ | tr "\n" " ")中引入了一个变量,然后在go install & go build中使用了这个变量,比如@go build $(GOFLAGS) $(PKG)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 19:40:13

_libs目录以_开头,并被go工具忽略。当您将包移动到vendor/时,./...通配符现在包含供应商目录中的所有包。

您应该显式列出要安装的包,而不是依赖./...通配符。如果仍然希望使用通配符行为,则可以使用go list ./...并筛选其路径中包含vendor/目录的任何包。根据您的具体需要,这可能非常简单,如:

代码语言:javascript
运行
复制
go install $(go list ./... | grep -v vendor/)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41589384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档