在Go 中從根目錄提供主頁和靜態內容
在Go 中,從根目錄提供靜態內容和主頁,同時處理特定的內容URL 需要量身定制的方法。預設情況下,為根路徑(“/”)註冊處理程序與從相同目錄提供靜態內容相衝突。
要解決此問題,一種選擇是使用替代 FileServer 實作來檢查是否存在在嘗試提供檔案之前。對於不存在的文件,它可以遵循主頁處理程序或返回 404 錯誤。
以下程式碼示範了這種方法:
package main import ( "fmt" "net/http" "os" ) func HomeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "HomeHandler") } func exists(path string) bool { _, err := os.Stat(path) return !os.IsNotExist(err) } func FileServerWithFallback(dir string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { path := dir + r.URL.Path if exists(path) { http.ServeFile(w, r, path) return } } } func main() { http.HandleFunc("/", HomeHandler) // homepage http.Handle("/static/", FileServerWithFallback("./static")) http.ListenAndServe(":8080", nil) }
在此程式碼中,exists 函數檢查是否存在檔案存在於給定路徑。如果檔案存在於提供的目錄中,則 FileServerWithFallback 處理程序提供檔案服務。否則,它允許請求繼續處理主頁處理程序。
透過使用此自訂的 FileServer 實現,可以從根目錄提供靜態內容,同時仍允許按預期呼叫主頁處理程序。
以上是如何在 Go 中從根目錄提供主頁和靜態內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!