Heim >Backend-Entwicklung >Golang >Wie kann ich das Dateisystem in Go für Test und Flexibilität verspotten oder abstrahieren?

Wie kann ich das Dateisystem in Go für Test und Flexibilität verspotten oder abstrahieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-02 03:48:12346Durchsuche

How Can I Mock or Abstract the Filesystem in Go for Testing and Flexibility?

Dateisystem in Go verspotten/abstrahieren

Anforderung:
Ziel ist es, alle Lesevorgänge im Dateisystem zu überwachen und schreibt in eine Go-Anwendung und ersetzt möglicherweise das physische Dateisystem durch ein In-Memory-Dateisystem Alternative.

Lösung:
Andrew Gerrand, der Erfinder von Go, bietet eine einfache, aber effektive Lösung:

var fs fileSystem = osFS{}

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)
}

// osFS implements fileSystem using the local disk.
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) }

So verwenden Sie diese Lösung:

  • Definieren Sie ein Schnittstellendateisystem, das die grundlegenden Dateisystemoperationen definiert.
  • Implementieren Sie das Dateisystem für die lokale Festplatte (osFS) oder ein beliebiges benutzerdefiniertes In-Memory-Dateisystem.
  • Weisen Sie die ausgewählte Dateisystemimplementierung der globalen fs-Variablen zu.

Ihr Anwendungscode sollte die fs-Variable als verwenden die Dateisystemschnittstelle, anstatt direkt das Betriebssystempaket zu verwenden. Auf diese Weise können Sie das Dateisystem bei Bedarf einfach nachahmen oder ersetzen.

Das obige ist der detaillierte Inhalt vonWie kann ich das Dateisystem in Go für Test und Flexibilität verspotten oder abstrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn