php小編香蕉發(fā)現(xiàn),在使用Go語言開發(fā)Web端應(yīng)用時(shí),有時(shí)會(huì)遇到一個(gè)常見的問題:當(dāng)我們嘗試訪問Web端點(diǎn)時(shí),卻收到一個(gè)404錯(cuò)誤,提示找不到靜態(tài)index.html文件。這個(gè)問題可能會(huì)讓開發(fā)者感到困惑,特別是對(duì)于初學(xué)者來說。那么,我們應(yīng)該如何解決這個(gè)問題呢?接下來,我們將詳細(xì)介紹解決方案,幫助你順利解決這個(gè)問題。
問題內(nèi)容
這是我的代碼:
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) } }
登錄后復(fù)制
頂級(jí)文件夾是 microservices
并設(shè)置為 go 工作區(qū)。該網(wǎng)絡(luò)服務(wù)將是眾多服務(wù)之一。它位于以下文件夾中:
microservices |--frontend |--cmd |--web |--static |--index.html |--main.go
登錄后復(fù)制
我位于頂級(jí)微服務(wù)文件夾中,我以以下方式啟動(dòng)它:go run ./frontend/cmd/web
。它啟動(dòng)正常,沒有錯(cuò)誤。但是當(dāng)我轉(zhuǎn)到 chrome 并輸入 http://localhost:3001
時(shí),我得到 404 頁面未找到。即使 http://localhost:3001/index.html
也會(huì)給出 404 頁面未找到。我剛剛學(xué)習(xí) go,不知道為什么找不到 ./static
文件夾?
解決方法
根據(jù)您的命令,路徑必須是./frontend/cmd/web/static,而不僅僅是./static。那不是便攜式的;路徑隨工作目錄而變化。
考慮嵌入靜態(tài)目錄。否則,您必須使路徑可配置(標(biāo)志、環(huán)境變量等)
嵌入的缺點(diǎn)是您必須在對(duì)靜態(tài)文件進(jìn)行任何更改后重建程序。
您還可以使用混合方法。如果設(shè)置了標(biāo)志(或其他),則使用它從磁盤提供服務(wù),否則使用嵌入式文件系統(tǒng)。該標(biāo)志在開發(fā)過程中很方便,并且嵌入式文件系統(tǒng)使部署變得容易,因?yàn)槟恍鑿?fù)制程序二進(jìn)制文件。
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))) // ... }
登錄后復(fù)制