2016-06-22 13 views
0

Ich bin neu bei GoLang Dev und versuche eine einfache Web-App zu erstellen. Ich habe dieses Tutorial https://www.youtube.com/watch?v=AiRhWG-2nGU verfolgt.Datei kann nicht in GoLang gelesen werden

Allerdings kann ich nicht einmal die index.html-Datei liefern.

Dies ist mein Code

func check(e error) { 
    if e != nil { 
     fmt.Println(e) 
     panic(e) 
    } 
} 

func Index(w http.ResponseWriter, r *http.Request) { 
    fmt.Println("Index functoin") 
    indexHTML, err := ioutil.ReadFile("index.html") 
    check(err) 
    fmt.Println(indexHTML) 
    w.Write(indexHTML) 
} 

und das ist der Fehler

erzeugt
Index functoin 
open index.html: no such file or directory 

Meine Baumstruktur ist wie so

BasicWebServer/ 
BasicWebServer/main.go 
BasicWebServer/index.html 
BasicWebServer/static/ 
BasicWebServer/static/index.html 

Alles, was ich möchte in der Lage sein zu dienen Die index.html, da es sich um eine AngularJS-App handelt, die bereits reibungslos läuft. Ich habe versucht, mit statischen Dateien wie so

router := NewRouter() 
s := http.StripPrefix("/static/", http.FileServer(http.Dir("./static/"))) 

aber es funktionierte nicht so bin ich jetzt die einfachste Ansatz versucht, ich denken konnte.

Bitte helfen.

Danke

+0

Ihre Dateien müssen relativ zum Arbeitsverzeichnis Ihres Serverprozesses sein. Der Speicherort in der Quelle hat nichts damit zu tun, wo Sie den Server ausführen. – JimB

+2

Mögliches Duplikat von [404 Seite nicht gefunden - Go Rendering CSS-Datei] (http://StackOverflow.com/Questions/28293452/404-Page-Not-Found-Go-Rendering-Css-Datei) – icza

+2

Auch verwandt/möglich duplizieren von [Warum muss ich http.StripPrefix verwenden, um auf meine statischen Dateien zuzugreifen?] (http://stackoverflow.com/questions/27945310/why-do-i-need-to-use-http-stripprefix-to-access -my-static-files) – icza

Antwort

2

Wenn Sie BasicWebServer/main.goBasicWebServer/index.html zeigen wollen, nicht derjenige innerhalb des static Ordner, dann scheint es, Sie nicht richtig den HTTP-Server konfiguriert haben.

Hier ist Ihr Code, mit Paketdeklaration, importiert und eine main Funktion funktioniert wie erwartet.

package main 

import (
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 

func check(e error) { 
    if e != nil { 
     fmt.Println(e) 
     panic(e) 
    } 
} 

func Index(w http.ResponseWriter, r *http.Request) { 
    fmt.Println("Index functoin") 
    indexHTML, err := ioutil.ReadFile("index.html") 
    check(err) 
    fmt.Println(indexHTML) 
    w.Write(indexHTML) 
} 

func main() { 
    http.HandleFunc("/", Index) 

    err := http.ListenAndServe(":8080", nil) 
    check(err) 
} 
+0

Hey, Mann. Danke für die Antwort. Ich habe es gerade ausprobiert und es hat nicht funktioniert. Ich bekomme "Die localhost-Seite funktioniert nicht localhost hat keine Daten gesendet. ERR_EMPTY_RESPONSE" erneut. Was ich tat, war, Ihre Quelle zu kopieren, sie in eine neue Datei main2.go einzufügen und "go run BasicWebServer/main2.go" auszuführen. Die Datei index.html befindet sich im selben Verzeichnis wie main2.go .... – mp3por

+0

Index funktoin22222 öffnen index.html: keine solche Datei oder Verzeichnis .... Dies ist die Ausgabe in der Konsole – mp3por

+0

Wenn ich liefern Den vollständigen Pfad bekomme ich aber die richtige Datei. Ich möchte jedoch nicht den vollständigen Pfad angeben müssen, da dies bedeutet, dass alle statischen Importe an meine Konfiguration gebunden sind. Was können wir dagegen tun? – mp3por