💬 Опишите основные возможности и пример использования пакета io/fs, добавленного в Go 1.16.
Следовательно, наши приложения могут создавать собственные внутренние файловые системы и работать с их файлами.
📌 Простой пример:
Функция
Прежде чем выводить совпадение, мы вызываем
io/fs
предлагает интерфейс файловой системы FS
, доступный только для чтения. embed.FS
реализует интерфейс fs.FS
, что дает возможность пользоваться некоторыми функциональными возможностями пакета io/fs
.Следовательно, наши приложения могут создавать собственные внутренние файловые системы и работать с их файлами.
📌 Простой пример:
func list(f embed.FS) error {
return fs.WalkDir(f, ".", walkFunction)
}
func walkFunction(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
fmt.Printf("Path=%q, isDir=%v\n", path, d.IsDir())
return nil
}
func extract(f embed.FS, filepath string) ([]byte, error) {
s, err := fs.ReadFile(f, filepath)
if err != nil {
return nil, err
}
return s, nil
}
Функция
ReadFile()
используется для извлечения файла, который идентифицируется по пути к файлу, из файловой системы embed.FS
в виде байтового среза, возвращаемого из функции extract()
.func walkSearch(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.Name() == searchString {
searchString
— это глобальная переменная, которая содержит строку поиска. Когда совпадение найдено, соответствующий путь выводится на экран.fileInfo, err := fs.Stat(f, path)
if err != nil {
return err
}
fmt.Println("Found", path, "with size", fileInfo.Size())
return nil
}
Прежде чем выводить совпадение, мы вызываем
fs.Stat()
с целью получить о нем более подробную информацию.return nil
}