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 サイトの他の関連記事を参照してください。