Der Go-Web-Endpunkt kann die statische index.html-Datei nicht finden

WBOY
Freigeben: 2024-02-09 11:18:17
nach vorne
1134 Leute haben es durchsucht

Go Web端点找不到静态index.html文件

php-Editor Banana hat herausgefunden, dass wir bei der Verwendung der Go-Sprache zum Entwickeln von Webanwendungen manchmal auf ein häufiges Problem stoßen: Wenn wir versuchen, auf den Web-Endpunkt zuzugreifen, erhalten wir einen 404-Fehler, der darauf hinweist, dass der statische Index .html nicht gefunden werden kann Datei. Diese Frage kann für Entwickler, insbesondere für Anfänger, verwirrend sein. Wie also sollen wir dieses Problem lösen? Als Nächstes stellen wir Ihnen die Lösung im Detail vor, damit Sie dieses Problem reibungslos lösen können.

Frageninhalt

Das ist mein Code:

package main

import (
    "fmt"
    "log"
    "net/http"
)

const customport = "3001"

func main() {
    fileserver := http.fileserver(http.dir("./static"))
    port:= fmt.sprintf(":%s", customport)
    http.handle("/", fileserver)

    fmt.printf("starting front end service on port %s", port)
    err := http.listenandserve(port, nil)
    if err != nil {
        log.panic(err)
    }
}
Nach dem Login kopieren

Der Ordner der obersten Ebene ist microservices und ist als Go-Arbeitsbereich festgelegt. Dieser Webdienst wird einer von vielen sein. Es befindet sich im folgenden Ordner:

microservices
 |--frontend
    |--cmd
       |--web
          |--static
             |--index.html
       |--main.go
Nach dem Login kopieren

Ich befinde mich im Microservice-Ordner der obersten Ebene und starte ihn mit: go run ./frontend/cmd/web。它启动正常,没有错误。但是当我转到 chrome 并输入 http://localhost:3001 时,我得到 404 页面未找到。即使 http://localhost:3001/index.html 也会给出 404 页面未找到。我刚刚学习 go,不知道为什么找不到 ./static Ordner?

Workaround

Gemäß Ihrem Befehl muss der Pfad ./frontend/cmd/web/static sein, nicht nur ./static. Das ist nicht portierbar; der Pfad ändert sich mit dem Arbeitsverzeichnis.

Erwägen Sie die Einbettung statischer Verzeichnisse. Andernfalls müssen Sie den Pfad konfigurierbar machen (Flags, Umgebungsvariablen usw.)

Der Nachteil der Einbettung besteht darin, dass Sie das Programm neu erstellen müssen, nachdem Sie Änderungen an den statischen Dateien vorgenommen haben.

Sie können auch eine Hybridmethode verwenden. Wenn das Flag (oder ein anderes) gesetzt ist, verwenden Sie es für die Bereitstellung von der Festplatte, andernfalls verwenden Sie das eingebettete Dateisystem. Dieses Flag ist während der Entwicklung praktisch und das eingebettete Dateisystem erleichtert die Bereitstellung, da Sie nur die Programmbinärdateien kopieren müssen.

package main

import (
    "embed"
    "flag"
    "io/fs"
    "net/http"
    "os"
)

//go:embed web/static
var embeddedAssets embed.FS

func main() {
    var staticDir string

    flag.StringVar(&staticDir, "static-dir", staticDir, "Path to directory containing static assets. If empty embedded assets are used.")
    flag.Parse()

    var staticFS fs.FS = embeddedAssets
    if staticDir != "" {
        staticFS = os.DirFS(staticDir)
    }

    http.Handle("/", http.FileServer(http.FS(staticFS)))

    // ...
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDer Go-Web-Endpunkt kann die statische index.html-Datei nicht finden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage