Maison > développement back-end > Golang > le corps du texte

Go Web Endpoint ne trouve pas le fichier index.html statique

WBOY
Libérer: 2024-02-09 11:18:17
avant
1110 Les gens l'ont consulté

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

L'éditeur php Banana a constaté que lors de l'utilisation du langage Go pour développer des applications Web, nous rencontrons parfois un problème courant : lorsque nous essayons d'accéder au point de terminaison Web, nous recevons une erreur 404, indiquant que l'index statique est introuvable .html déposer. Cette question peut prêter à confusion pour les développeurs, en particulier pour les débutants. Alors, comment devrions-nous résoudre ce problème ? Ensuite, nous présenterons la solution en détail pour vous aider à résoudre ce problème en douceur.

Contenu de la question

Voici mon 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)
    }
}
Copier après la connexion

Le dossier de niveau supérieur est microservices et est défini comme espace de travail Go. Ce service Web sera l’un des nombreux. Il se trouve dans le dossier suivant :

microservices
 |--frontend
    |--cmd
       |--web
          |--static
             |--index.html
       |--main.go
Copier après la connexion

Je suis dans le dossier microservice de niveau supérieur et je le démarre avec : go run ./frontend/cmd/web。它启动正常,没有错误。但是当我转到 chrome 并输入 http://localhost:3001 时,我得到 404 页面未找到。即使 http://localhost:3001/index.html 也会给出 404 页面未找到。我刚刚学习 go,不知道为什么找不到 ./static dossier ?

Solution de contournement

Selon votre commande, le chemin doit être ./frontend/cmd/web/static, pas seulement ./static. Ce n'est pas portable ; le chemin change avec le répertoire de travail.

Envisagez de intégrer des répertoires statiques. Sinon il faut rendre le chemin configurable (drapeaux, variables d'environnement, etc.)

L'inconvénient de l'intégration est que vous devez reconstruire le programme après avoir apporté des modifications aux fichiers statiques.

Vous pouvez également utiliser une méthode hybride. Si l'indicateur (ou autre) est défini, utilisez-le pour servir à partir du disque, sinon utilisez le système de fichiers intégré. Cet indicateur est pratique pendant le développement et le système de fichiers intégré facilite le déploiement puisqu'il vous suffit de copier les binaires du programme.

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

    // ...
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!