"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo burlarse del sistema de archivos en las operaciones de registro y en memoria?

¿Cómo burlarse del sistema de archivos en las operaciones de registro y en memoria?

Publicado el 2025-03-23
Navegar:903

How to Mock the File System in Go for Logging and In-Memory Operations?

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.

Último tutorial Más>

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