Go でメモリから静的ファイルを提供する
Go では、FileServer ハンドラーは静的ファイルを提供するための便利な方法を提供します。ただし、ファイル数が制限されている特定のシナリオ (例: 2 ~ 3 個のファイル) では、これらのファイルの展開を手動で管理するのは面倒な場合があります。
メモリ内ファイル サービング
外部ファイル処理の必要性を軽減するために、静的ファイルをバイナリに埋め込み、メモリから直接提供するオプションを検討できます。これを実現する 1 つの方法は、カスタム ファイル システムの実装を使用することです。
カスタム ファイル システム インターフェイスの実装
FileServer ハンドラには、通常、実際のファイルを表す FileSystem オブジェクトが必要です。システム。ただし、メモリ内でのみ動作する独自の FileSystem 実装を作成できます。次のコードは、単純なメモリ内ファイル システムを定義します。
package main import ( "net/http" ) type InMemoryFS map[string]http.File
ファイル システムと対話するために、メモリ内のファイルを表す http.File オブジェクトを返す Open メソッドを実装します。
func (fs InMemoryFS) Open(name string) (http.File, error) { if f, ok := fs[name]; ok { return f, nil } panic("No file") }
メモリ内ファイルの実装
次に、 http.File インターフェイスを実装する InMemoryFile 型:
type InMemoryFile struct { at int64 Name string data []byte fs InMemoryFS }
InMemoryFile 実装は、Read、Seek、Close などのファイル データを操作するためのメソッドを提供します。
In の作成-Memory File Server
カスタム FileSystem と http.File の実装により、メモリ内ファイル システム上で動作する FileServer を作成できます:
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)
このアプローチにより、静的ファイルを定数として定義し、メモリから直接提供できるため、外部ファイル管理の必要がなくなります。
以上がGo で静的ファイルをメモリから直接提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。