Напишите функцию FindFilesByExtension, которая рекурсивно ищет файлы в директории и возвращает срез абсолютных путей к файлам ([]string), удовлетворяющих условиям:

go package main

Короткий ответ

Что ответить на собеседовании

go package main

Подробный разбор

Ответ с пояснениями

Условие

Напишите функцию FindFilesByExtension, которая рекурсивно ищет файлы в директории и возвращает срез абсолютных путей к файлам ([]string), удовлетворяющих условиям:

расширение файла == targetExtension (без учета регистра)

размер файла > minSizeKB

Функция должна обходить все вложенные поддиректории.

Пример структуры директории:

/projects/ ├── doc.pdf (2048 KB) ├── report.docx (512 KB) ├── src/ │ ├── Main.go (2 KB) │ ├── Utils.go (5 KB) └── images/ └── photo.jpg (3072 KB)

Примеры проверок:

files1, _ := FindFilesByExtension("/projects", "pdf", 1000) // files1 == []string{"/projects/doc.pdf"}

files2, _ := FindFilesByExtension("/projects", "go", 3) // files2 == []string{"/projects/src/Utils.go"}

files3, _ := FindFilesByExtension("/projects", "jpg", 2000) // files3 == []string{"/projects/images/photo.jpg"}

Ответ

go package main

import ( "io/fs" "os" "path/filepath" "strings" )

func FindFilesByExtension(rootDir, targetExtension string, minSizeKB int64) ([]string, error) { var result []string

targetExtension = strings.ToLower(targetExtension)

err := filepath.WalkDir(rootDir, func(path string, d fs.DirEntry, err error) error {
	if err != nil {
		return err
	}
	if d.IsDir() {
		return nil
	}

	ext := strings.ToLower(strings.TrimPrefix(filepath.Ext(d.Name()), "."))
	if ext != targetExtension {
		return nil
	}

	info, err := d.Info()
	if err != nil {
		return err
	}

	sizeKB := info.Size() / 1024
	if sizeKB > minSizeKB {
		absPath, err := filepath.Abs(path)
		if err != nil {
			return err
		}
		result = append(result, absPath)
	}
	return nil
})

return result, err

}

// Пример использования // files, err := FindFilesByExtension("/projects", "pdf", 1000) // if err != nil { // log.Fatal(err) // } // fmt.Println(files)

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку