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.
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 ?
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!