Maison >développement back-end >Golang >Comment puis-je simuler ou extraire le système de fichiers dans Go à des fins de test et de flexibilité ?

Comment puis-je simuler ou extraire le système de fichiers dans Go à des fins de test et de flexibilité ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-02 03:48:12409parcourir

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

Mocking/Abstracting Filesystem in Go

Exigence :
L'objectif est de surveiller toutes les lectures du système de fichiers et écrit dans une application Go et remplace potentiellement le système de fichiers physique par un système de fichiers en mémoire alternative.

Solution :
Andrew Gerrand, le créateur de Go, propose une solution simple mais efficace :

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

Pour utiliser cette solution :

  • Définir un système de fichiers d'interface qui définit les opérations de base du système de fichiers.
  • Implémenter un système de fichiers pour le disque local (osFS) ou tout système de fichiers personnalisé en mémoire.
  • Attribuez l'implémentation du système de fichiers choisi à la variable globale fs.

Votre code d'application doit utiliser la variable fs comme l'interface du système de fichiers au lieu d'utiliser directement le package os. Cela vous permet de facilement simuler ou remplacer le système de fichiers selon vos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn