Menyajikan Fail Statik daripada Binari dalam Go: Sistem Fail Tersuai
Apabila menyiarkan fail statik dalam Go, pengendali FileServer memudahkan proses. Walau bagaimanapun, untuk kes di mana hanya beberapa fail statik perlu digunakan, pendekatan alternatif boleh menghapuskan keperluan untuk mengurus fail tersebut secara luaran.
Pelaksanaan InMemoryFS
Pelayan Fail memerlukan objek FileSystem, yang membawa kepada persoalan bagaimana untuk membakar fail statik ke dalam binari. Pelaksanaan InMemoryFS boleh menyampaikan fail daripada memori, menghapuskan keperluan untuk berinteraksi dengan sistem fail secara langsung.
package main import ( "io" "net/http" "time" ) type InMemoryFS map[string]io.ReadCloser // Implements FileSystem interface func (fs InMemoryFS) Open(name string) (http.File, error) { f, ok := fs[name] if !ok { return nil, os.ErrNotExist } return &InMemoryFile{ ReadCloser: f, }, nil } type InMemoryFile struct { io.ReadCloser } // Implements http.File interface func (f *InMemoryFile) Close() error { return nil } func (f *InMemoryFile) Stat() (os.FileInfo, error) { fi, err := f.ReadCloser.Stat() if err != nil { return nil, err } return &InMemoryFileInfo{ name: f.ReadCloser.(os.FileInfo).Name(), size: fi.Size(), modTime: fi.ModTime(), }, nil } type InMemoryFileInfo struct { name string size int64 modTime time.Time } // Implements os.FileInfo func (s *InMemoryFileInfo) Name() string { return s.name } func (s *InMemoryFileInfo) Size() int64 { return s.size } func (s *InMemoryFileInfo) Mode() os.FileMode { return 0644 } func (s *InMemoryFileInfo) ModTime() time.Time { return s.modTime } func (s *InMemoryFileInfo) IsDir() bool { return false } func (s *InMemoryFileInfo) Sys() interface{} { return nil }
Contoh Penggunaan
Pelaksanaan InMemoryFS boleh digunakan dengan FileServer seperti berikut:
func main() { FS := make(InMemoryFS) // Load static files into memory FS["foo.html"] = os.Open("foo.html") FS["bar.css"] = os.Open("bar.css") http.Handle("/", http.FileServer(FS)) http.ListenAndServe(":8080", nil) }
Alternatif Pertimbangan
Daripada mencipta Sistem Fail tersuai, mungkin lebih mudah untuk menulis semula bahagian penyajian untuk mengendalikan sebilangan kecil fail statik secara langsung, mengelakkan keperluan untuk meniru sistem fail yang lengkap. Akhirnya, pendekatan terbaik bergantung pada keperluan khusus projek.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melayan Fail Statik yang Dibenamkan dalam Perduaan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!