ホームページ > バックエンド開発 > Golang > Go でルート ディレクトリとホームページ ハンドラーから静的コンテンツを提供するにはどうすればよいですか?

Go でルート ディレクトリとホームページ ハンドラーから静的コンテンツを提供するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-18 22:19:10
オリジナル
123 人が閲覧しました

How to Serve Static Content from the Root Directory and a Homepage Handler in Go?

ホームページ ハンドラーを維持しながらルートから静的コンテンツを提供する

Golang では、ルート ディレクトリから静的コンテンツを提供し、専用のメソッドでホームページを処理します

従来、単純な Web サーバーは http.HandleFunc を使用して、次のようにホームページ ハンドラーを登録します:

http.HandleFunc("/", HomeHandler)
ログイン後にコピー

ただし、http.Handle を使用してルート ディレクトリから静的コンテンツを提供しようとすると、「/」の重複登録によりパニックが発生します。

代替アプローチ: 明示的なルート ファイルを提供する

1 つの解決策は、次の使用を避けることです。 http.ServeMux を使用し、代わりにルート ディレクトリ内の各ファイルを明示的に提供します。このアプローチは、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)
}
ログイン後にコピー

このアプローチにより、他のリソースに対して、特定のルートベースのファイルのみが明示的に提供されます。サブディレクトリに移動し、http.FileServer ミドルウェア経由で提供できます。

以上がGo でルート ディレクトリとホームページ ハンドラーから静的コンテンツを提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート