ホームページ >バックエンド開発 >Golang >Go HTTP サーバーの URL から .html 拡張子を削除するにはどうすればよいですか?

Go HTTP サーバーの URL から .html 拡張子を削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 03:19:31872ブラウズ

How to Remove the .html Extension from URLs in Your Go HTTP Server?

カスタム ファイル システムを使用して .html 拡張子を削除する

URL に .html 拡張子が表示されないようにするための 1 つの方法は、 http.Dir を使用する http.FileSystem インターフェイス。このソリューションは http.FileServer の堅牢なコードを利用します。

これを実装するには、http.Dir:

<code class="go">type HTMLDir struct {
    d http.Dir
}</code>

を埋め込むカスタム タイプを作成します。このカスタム ファイル システムを使用するように main 関数を変更します。 http.FileServer の代わりに:

<code class="go">func main() {
    fs := http.FileServer(HTMLDir{http.Dir("public/")})
    http.Handle("/", http.StripPrefix("/", fs))
    http.ListenAndServe(":8000", nil)
}</code>

次に、HTMLDir 型の Open メソッドを定義します。このメソッドは、ファイル システムがファイル要求を処理する方法を決定します。

常に .html 拡張子を使用する:

<code class="go">func (d HTMLDir) Open(name string) (http.File, error) {
    return d.d.Open(name + ".html")
}</code>

.html 拡張子にフォールバックします。 :

<code class="go">func (d HTMLDir) Open(name string) (http.File, error) {
    f, err := d.d.Open(name)
    if os.IsNotExist(err) {
        if f, err := d.d.Open(name + ".html"); err == nil {
            return f, nil
        }
    }
    return f, err
}</code>

ファイル名へのフォールバック (拡張子なし):

<code class="go">func (d HTMLDir) Open(name string) (http.File, error) {
    f, err := d.d.Open(name + ".html")
    if os.IsNotExist(err) {
        if f, err := d.d.Open(name); err == nil {
            return f, nil
        }
    }
    return f, err
}</code>

上記の解決策を実装すると、. Go HTTP サーバーにアクセスするときに URL から html 拡張子を取得します。

以上がGo HTTP サーバーの URL から .html 拡張子を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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