2017-05-24 5 views
0

Ich bin neu bei Golang und möchte meine erste einfache Webanwendung erstellen. Jedes Mal, wenn ich meine Quelle erstellen möchte, erhalte ich einen Fehler locale import "./controllers" in non-local package".GO - Lokaler Import funktioniert nicht

Hier ist meine Ordnerstruktur:

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

Die main.go Datei:

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)) 
} 

Die IndexController.go Datei:

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:]) 
} 

Meine Dockerfile Datei (von https://hub.docker.com/_/golang/ kopiert):

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"] 

Der Docker und gehen Befehl bauen:

docker build -t my-golang-app .

und zumindest die Konsolenausgabe:

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 
+0

ist wahrscheinlich ein Duplikat https://stackoverflow.com/questions/30885098/go-local-import-in-non-local-package Use „github.com/julienschmidt/httprouter/controllers“ statt "./controllers" – nilsmagnus

+0

Mögliches Duplikat von [Go: lokaler Import in nicht-lokales Paket] (https://stackoverflow.com/questions/30885098/go-local-import-in-non-local-package) – nilsmagnus

Antwort

1

♂️

fand ich endlich das Problem. In der main.go Datei muss ich app/controllers anstelle von ./controllers importieren, weil in Dockerfile der Pfad /go/src/app ist. Diese

+0

Ich bin froh, Sie löste das Problem, aber ich möchte Sie auffordern, dem Rat von nilsmagnus (und der gesamten Golang-Dokumentation) zu folgen und lokale Importe zu vermeiden. Richten Sie Ihre Umgebung wie empfohlen ein und verwenden Sie einen vollständig qualifizierten Import. Ich verspreche dir, dass dir das später das Leben leichter machen wird. golinter wird Sie stöhnen, wenn Sie auch lokale Importe verwenden – WebweaverD