Mengejek dan Mengabstraksi Sistem Fail dalam Go
Soalan:
Adakah mungkin untuk memantau I/O operasi yang dilakukan oleh aplikasi Go pada sistem fail asas? Selain itu, bolehkah sistem fail fizikal digantikan dengan rakan dalam memori?
Jawapan:
Ya, adalah mungkin untuk mengabstrak dan mengejek sistem fail dalam Go. Berikut ialah pendekatan yang diilhamkan oleh pandangan Andrew Gerrand:
Tentukan antara muka sistem fail yang mewakili operasi sistem fail penting:
type fileSystem interface { Open(name string) (file, error) Stat(name string) (os.FileInfo, error) }
Buat antara muka fail untuk operasi berkaitan fail:
type file interface { io.Closer io.Reader io.ReaderAt io.Seeker Stat() (os.FileInfo, error) }
Laksanakan jenis osFS lalai yang menggunakan tempatan cakera:
type osFS struct{} func (osFS) Open(name string) (file, error) { return os.Open(name) } func (osFS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) }
Dalam kod aplikasi anda, hantar antara muka sistem fail sebagai hujah atau benamkannya dalam jenis pembalut:
func myFunc(fs fileSystem) { f, err := fs.Open("my_file.txt") ... }
Untuk menggunakan sistem fail dalam memori, cipta jenis memoryFS yang melaksanakan antara muka sistem fail dan menyimpan fail dalam struktur data dalaman. Ini membolehkan anda memintas dan log semua peristiwa I/O semasa menggunakan sistem fail olok-olok:
type memoryFS struct { files map[string][]byte } func (mfs memoryFS) Open(name string) (file, error) { ... } func (mfs memoryFS) Stat(name string) (os.FileInfo, error) { ... }
Atas ialah kandungan terperinci Bolehkah Aplikasi Go Mengejek atau Memantau Operasi I/O Sistem Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!