editor php Banana mendapati bahawa apabila menggunakan bahasa Go untuk membangunkan aplikasi web, kadangkala kami menghadapi masalah biasa: apabila kami cuba mengakses titik akhir web, kami menerima ralat 404, menunjukkan bahawa indeks statik tidak dapat ditemui .html fail. Soalan ini boleh mengelirukan bagi pembangun, terutamanya untuk pemula. Jadi, bagaimana kita harus menyelesaikan masalah ini? Seterusnya, kami akan memperkenalkan penyelesaian secara terperinci untuk membantu anda menyelesaikan masalah ini dengan lancar.
Ini kod saya:
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) } }
Folder peringkat atas ialah microservices
dan ditetapkan sebagai ruang kerja pergi. Perkhidmatan web ini akan menjadi salah satu daripada banyak. Ia terletak dalam folder berikut:
microservices |--frontend |--cmd |--web |--static |--index.html |--main.go
Saya berada dalam folder perkhidmatan mikro peringkat atas dan saya memulakannya dengan: go run ./frontend/cmd/web
。它启动正常,没有错误。但是当我转到 chrome 并输入 http://localhost:3001
时,我得到 404 页面未找到。即使 http://localhost:3001/index.html
也会给出 404 页面未找到。我刚刚学习 go,不知道为什么找不到 ./static
folder?
Mengikut arahan anda, laluan mestilah ./frontend/cmd/web/static, bukan hanya ./static. Itu bukan mudah alih; laluan berubah dengan direktori kerja.
Pertimbangkan membenamkan direktori statik. Jika tidak, anda perlu membuat laluan boleh dikonfigurasikan (bendera, pembolehubah persekitaran, dll.)
Kelemahan pembenaman ialah anda perlu membina semula program selepas membuat sebarang perubahan pada fail statik.
Anda juga boleh menggunakan kaedah hibrid. Jika bendera (atau lain-lain) ditetapkan, gunakan itu untuk berkhidmat dari cakera, jika tidak gunakan sistem fail terbenam. Bendera ini mudah semasa pembangunan, dan sistem fail terbenam menjadikan penggunaan mudah kerana anda hanya perlu menyalin binari program.
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))) // ... }
Atas ialah kandungan terperinci Go web endpoint tidak dapat mencari fail index.html statik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!