首頁 >後端開發 >Golang >在 Go 中從根目錄提供靜態內容和主頁時如何避免衝突?

在 Go 中從根目錄提供靜態內容和主頁時如何避免衝突?

Linda Hamilton
Linda Hamilton原創
2024-12-20 11:47:09491瀏覽

How to Avoid Conflicts When Serving Static Content and a Homepage from the Root Directory in Go?

從根目錄提供主頁和靜態內容

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn