【问题标题】:GO - Local import not workingGO - 本地导入不起作用
【发布时间】:2017-05-24 06:29:22
【问题描述】:

我是 golang 新手,我想构建我的第一个简单的 Web 应用程序。每次我想构建源代码时,都会收到错误 locale import "./controllers" in non-local package"

这是我的文件夹结构:

goTest
├── Dockerfile
├── controllers
│   └── IndexController.go
└── main.go

main.go 文件:

package main

import (
    "github.com/julienschmidt/httprouter"
    "net/http"
    "log"
    "./controllers"
)

func main() {
    router := httprouter.New()
    router.GET("/", IndexController)

    log.Fatal(http.ListenAndServe(":8080", router))
}

IndexController.go 文件:

package controllers

import (
  "fmt"
)

func IndexController(w http.ResponseWriter, r *http.Request, ps httprouter.Params) error {
    fmt.Fprintf(w, "Hi %s!", r.URL.Path[1:])
}

我的Dockerfile 文件(复制自https://hub.docker.com/_/golang/):

FROM golang:1.8

WORKDIR /go/src/app
COPY . .

RUN go-wrapper download   # "go get -d -v ./..."
RUN go-wrapper install    # "go install -v ./..."

EXPOSE 8080

CMD ["app"]

docker 和 go build 命令:

docker build -t my-golang-app .

至少还有控制台输出:

Sending build context to Docker daemon  4.608kB
Step 1/7 : FROM golang:1.8
 ---> b2063493320d
Step 2/7 : WORKDIR /go/src/app
 ---> Using cache
 ---> 86d4df9fceaa
Step 3/7 : COPY . .
 ---> 282286e66939
Removing intermediate container fe3c0686729a
Step 4/7 : RUN go-wrapper download   # "go get -d -v ./..."
 ---> Running in f34b5a5ef0de
+ exec go get -v -d
github.com/julienschmidt/httprouter (download)
main.go:7:5: local import "./controllers" in non-local package
The command '/bin/sh -c go-wrapper download   # "go get -d -v ./..."' returned a non-zero code: 1

【问题讨论】:

标签: docker go


【解决方案1】:

?‍♂️

我终于找到了问题。在main.go 文件中,我必须导入app/controllers 而不是./controllers,因为在Dockerfile 中,路径是/go/src/app

【讨论】:

  • 很高兴您解决了这个问题,但我敦促您遵循 nilsmagnus 的建议(以及所有 golang 文档)并避免本地导入。按照建议设置您的环境并使用完全限定的导入。我保证这会让你以后的生活更轻松。如果您也使用本地进口产品,golinter 会抱怨您
猜你喜欢
  • 2015-09-02
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多