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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-18 11:05:10121ブラウズ

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

Go のルートからホームページと静的コンテンツを提供する

Go では、特定の処理を行いながらルート ディレクトリから静的コンテンツとホームページの両方を提供しますURL には、カスタマイズされたアプローチが必要です。デフォルトでは、ルート パス (「/」) のハンドラーを登録すると、同じディレクトリから静的コンテンツを提供することと競合します。

これに対処するには、次のオプションの 1 つは、次のファイル サーバーの存在をチェックする代替の 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。