ホームページ >バックエンド開発 >Golang >Go でメモリから静的ファイルを提供するにはどうすればよいですか?

Go でメモリから静的ファイルを提供するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-02 17:55:401011ブラウズ

How Can I Serve Static Files from Memory in Go?

Go でメモリから静的ファイルを提供する

Web アプリケーションでは、多くの場合、JavaScript、CSS、画像などの静的ファイルを提供する必要があります。通常、Go ではこの目的のために FileServer ハンドラーが使用されます。ただし、バイナリ内にいくつかの静的ファイルを埋め込んでメモリから提供する方が効率的なシナリオもあります。

1 つのアプローチは、カスタム FileSystem インターフェイス実装を利用することです。 FileServer には、コンストラクターとして FileSystem が必要です。通常、http.Dir は FileSystem の作成に使用されますが、独自の実装も可能です。

InMemoryFS 実装

次の InMemoryFS 実装は、メモリ内のファイル システムをシミュレートします。 :

type InMemoryFS map[string]http.File

func (fs InMemoryFS) Open(name string) (http.File, error) {
    if f, ok := fs[name]; ok {
        return f, nil
    }
    panic("No file")
}

メモリ内ファイル実装

InMemoryFile 構造体は、InMemoryFS 内のファイルとして機能します。

type InMemoryFile struct {
    at   int64
    Name string
    data []byte
    fs   InMemoryFS
}

func LoadFile(name string, val string, fs InMemoryFS) *InMemoryFile {
    return &InMemoryFile{at: 0,
        Name: name,
        data: []byte(val),
        fs:   fs}
}

この実装には特定の制限があり、主にデモ目的で使用されることに注意してください。

静的ファイルの提供元メモリ

InMemoryFS が実装されたら、メモリから静的ファイルを提供できます。

FS := make(InMemoryFS)
FS["foo.html"] = LoadFile("foo.html", HTML, FS)
FS["bar.css"] = LoadFile("bar.css", CSS, FS)
http.Handle("/", http.FileServer(FS))
http.ListenAndServe(":8080", nil)

代替アプローチ

あるいは、 FileSystem インターフェイスを再実装する代わりに、メモリからファイルを提供するように FileServer ハンドラーを変更することもできます。これは、より単純なユースケースではより便利かもしれません。

結論

カスタム FileServer 実装を使用するか、FileSystem インターフェイスを再実装することにより、静的ファイルを埋め込んで提供することができます。 Go アプリケーションのメモリから。このアプローチは、複雑なファイル提供ロジックを必要としない少数の静的ファイルをデプロイする場合に有益です。

以上がGo でメモリから静的ファイルを提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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