entendiendo el sistema de archivos que se burla de go
pregunta: ¿cómo puedo burlarme o abstraer el sistema de archivos en las operaciones de archivo de registro y potencialmente crear un archivo en la memoria sistema?
Respuesta:
para maullarse o abstraer el sistema de archivos en GO, puede aprovechar el siguiente enfoque:
Definir interfaces para operaciones del sistema de archivos y archivos:
tipo Interface de la interfaz del sistema de archivos { Open (Nombre String) (archivo, error) STAT (Nombre String) (OS.FileInfo, Error) } Escriba la interfaz de archivo { io.closer io.reader io.readerat io.seeker Stat () (OS.FileInfo, error) }type fileSystem interface { Open(name string) (file, error) Stat(name string) (os.FileInfo, error) } type file interface { io.Closer io.Reader io.ReaderAt io.Seeker Stat() (os.FileInfo, error) }cree una implementación del sistema de archivos predeterminado usando el disco local:
escriba OSFS struct {} Func (OSFS) Open (Name String) (archivo, error) {return OS.open (name)} Func (OSFS) stat (name String) (OS.FileInfo, Error) {return OS.Stat (name)}
type fileSystem interface { Open(name string) (file, error) Stat(name string) (os.FileInfo, error) } type file interface { io.Closer io.Reader io.ReaderAt io.Seeker Stat() (os.FileInfo, error) }Implemente la interfaz del sistema de archivos usando su código personalizado:
Myfs struct { // Implementación del sistema de archivos personalizado } func (myfs) open (name string) (archivo, error) { // Implementación personalizada para abrir un archivo // Registre la operación del archivo fmt.printf ("Archivo abierto: %s \ n", nombre) // devuelve un objeto de archivo simulado return & mockfile {}, nil } FUNC (MYFS) STAT (Nombre String) (OS.FileInfo, Error) { // Implementación personalizada para obtener información del archivo // Registre la operación del archivo fmt.printf ("Obtener información del archivo: %s \ n", nombre) // devuelve información del archivo simulado Return & OS.FileInfo {}, nil }
type fileSystem interface { Open(name string) (file, error) Stat(name string) (os.FileInfo, error) } type file interface { io.Closer io.Reader io.ReaderAt io.Seeker Stat() (os.FileInfo, error) }Modifique su código para aceptar un argumento del sistema de archivos:
func myFunc (FS Files System) { F, err: = fs.open ("myFile.txt") si err! = nil { fmt.println (err) devolver } // realizar operaciones de archivo utilizando el objeto de archivo simulado }
type fileSystem interface { Open(name string) (file, error) Stat(name string) (os.FileInfo, error) } type file interface { io.Closer io.Reader io.ReaderAt io.Seeker Stat() (os.FileInfo, error) }inyectando la implementación de su sistema de archivos personalizado, puede registrar las operaciones de archivos y crear un sistema de archivos en memoria implementando las interfaces del sistema de archivos y archivos de manera adecuada.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3