在 Go 中,您可以從根目錄提供靜態內容和主頁。但是,當兩種方法都註冊到根 URL 時,就會出現衝突。
要提供靜態內容,例如圖片和 CSS,您需要使用 http.Handle 並提供http.目錄。但是,如果您對根 URL 執行此操作,它將與主頁處理程序衝突。
要提供主頁,請使用 http.HandleFunc 並提供一個處理程序函數,該函數編寫主頁內容。
要解決衝突,請考慮提供服務明確特定的根文件。例如,您可以將 sitemap.xml、favicon.ico 和 robots.txt 作為單獨的檔案提供。
package main import ( "fmt" "net/http" ) func HomeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "HomeHandler") } func serveSingle(pattern string, filename string) { http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filename) }) } func main() { http.HandleFunc("/", HomeHandler) // homepage // Mandatory root-based resources serveSingle("/sitemap.xml", "./sitemap.xml") serveSingle("/favicon.ico", "./favicon.ico") serveSingle("/robots.txt", "./robots.txt") // Normal resources http.Handle("/static", http.FileServer(http.Dir("./static/"))) http.ListenAndServe(":8080", nil) }
移動所有其他靜態資源(例如 CSS、 JS) 到 /static 等子目錄。然後,正常使用 http.Handle 和 http.Dir.
提供該子目錄以上是在 Go 中從根目錄提供靜態內容和主頁時如何避免衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!