【问题标题】:Go Dep - Missing sub-package "chi/middleware" after dep ensureGo Dep - 在 dep 确保后缺少子包“chi/middleware”
【发布时间】:2019-04-21 04:03:15
【问题描述】:

运行 dep ensure 后 go-chi 缺少中间件子包。

project-backend     |  main.go:8:2: cannot find package "github.com/go-chi/chi/middleware" in any of:
project-backend     |   /go/src/backend/vendor/github.com/go-chi/chi/middleware (vendor tree)
project-backend     |   /usr/local/go/src/github.com/go-chi/chi/middleware (from $GOROOT)
project-backend     |   /go/src/github.com/go-chi/chi/middleware (from $GOPATH)

我的 Docker 文件,我还在 docker-compose.yaml 文件中安装了我的代码卷

FROM golang:1.12

WORKDIR /go/src/backend
COPY Gopkg.toml Gopkg.lock ./
RUN go get -u github.com/golang/dep/cmd/dep
COPY . ./
RUN dep ensure

RUN go get github.com/pilu/fresh

CMD [ "fresh" ]

Gopkg.toml


[prune]
  go-tests = true
  unused-packages = true
  non-go = true

[[constraint]]
  name = "github.com/go-chi/chi"
  version = "4.0.2"

我的代码,只是一个用于测试我的 docker 和 dep 配置的基本路由器。

package main

import (
    "fmt"
    "net/http"

    "github.com/go-chi/chi"
    "github.com/go-chi/chi/middleware"
)

func main() {
    r := chi.NewRouter()
    r.Use(middleware.Logger)

    port := ":8080"

    r.Get("/api", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("API is working!"))
    })

    format := "\033[1;36m%s\033[0m"
    fmt.Printf(format, "Build success, running on port "+port)
    http.ListenAndServe(port, r)
}

我的代码在使用 go get 时运行良好。但是在 dep 上,它缺少它的子包。

【问题讨论】:

    标签: go go-chi


    【解决方案1】:

    由于您使用的是 Go 1.12,您可以尝试看看使用go mod (Go 1.11+ Modules) 时问题是否仍然存在。

    $ export GO111MODULE=on                         # manually active module mode
    $ cd $GOPATH/src/<project path>                 # e.g., cd $GOPATH/src/you/hello
    $ go mod init                  
    

    go mod init 将与您的部门 Gopkg.lock 文件一致。
    它应该检测并获取您丢失的依赖项。
    如果这有效,则运行 go mod tidy 以可能修剪任何无关的要求。

    【讨论】:

    • 我认为这是一个码头问题。我正在删除我的 docker 容器并再次构建它并且它可以工作。但是每次我安装一个 go 模块时删除我的 docker 容器是令人沮丧的,我什至在调整我的 Dockerfile,添加了一些你提供的答案,但它仍然需要删除 go 容器,
    • @Developer 为什么不将源安装为卷,如下所示:stackoverflow.com/a/48498921/6309。其他示例:callicoder.com/docker-golang-image-container-example
    • 我已经将我的代码挂载到了我的 docker-compose 文件中的卷中。我会相应地更新我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多