Maison  >  Article  >  développement back-end  >  Go Web Endpoint ne trouve pas le fichier index.html statique

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

WBOY
WBOYavant
2024-02-09 11:18:171015parcourir

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

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

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

    // ...
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer