Menyajikan Fail Statik daripada Memori dalam Go
Aplikasi web selalunya memerlukan penyajian fail statik, seperti JavaScript, CSS dan imej. Biasanya, pengendali FileServer digunakan dalam Go untuk tujuan ini. Walau bagaimanapun, terdapat senario yang lebih cekap untuk membenamkan beberapa fail statik dalam binari dan menyampaikannya daripada ingatan.
Satu pendekatan ialah menggunakan pelaksanaan antara muka Sistem Fail tersuai. FileServer memerlukan FileSystem untuk pembinanya. Walaupun http.Dir biasanya digunakan untuk mencipta FileSystem, adalah mungkin untuk melaksanakan kita sendiri.
Pelaksanaan InMemoryFS
Pelaksanaan InMemoryFS berikut mensimulasikan sistem fail dalam ingatan :
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 Pelaksanaan
Struktur InMemoryFile berfungsi sebagai fail dalam 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} }
Perhatikan bahawa pelaksanaan ini mempunyai had tertentu dan digunakan terutamanya untuk tujuan demonstrasi.
Menyajikan Fail Statik daripada Memori
Setelah InMemoryFS dilaksanakan, kami boleh menyampaikan fail statik daripada memori:
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)
Pendekatan Alternatif
Sebagai alternatif, daripada melaksanakan semula antara muka FileSystem, seseorang boleh mengubah suai pengendali FileServer untuk menyampaikan fail daripada memori. Ini mungkin lebih mudah untuk kes penggunaan yang lebih mudah.
Kesimpulan
Dengan menggunakan pelaksanaan FileServer tersuai atau melaksanakan semula antara muka FileSystem, adalah mungkin untuk membenamkan dan menyampaikan fail statik daripada memori dalam aplikasi Go. Pendekatan ini boleh memberi manfaat apabila menggunakan sebilangan kecil fail statik yang tidak memerlukan logik penyajian fail yang kompleks.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melayan Fail Statik daripada Memori dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!