Сканирование файлов в текущем каталоге только с помощью ioutils ReadDir при импорте через другой файл - PullRequest
0 голосов
/ 03 июня 2018

У меня проблема с ioutils.ReadDir, по какой-то причине он сканирует все файлы в корне проекта, а не только в текущем каталоге.

. / Main.go

import (
    "myfolder/myfile"
)

func main() {
    myfile.MyFunction()
}

. / Myfolder / myfile.go

package myfile

func MyFunction() {
    files, err := ioutil.ReadDir(".")
    if err != nil {
        log.Fatal(err)
    }

    for _, f := range files {
        fi, err := os.Stat(f.Name())
        if err != nil {
            log.Fatal(err)
            return
        }

        switch mode := fi.Mode(); {
        case mode.IsDir():
            fmt.Printf("%#s  is a folder\n", f.Name())
        case mode.IsRegular():
            fmt.Printf("%#s is a file\n", f.Name())
        }
    }
}

Я не совсем уверен, почему он так себя ведет, я новичок в Go.Я думаю, потому что он импортируется через main.go.Как мне сделать так, чтобы он только поиска папок и файлов в ./myfolder?

1 Ответ

0 голосов
/ 03 июня 2018

Текущий каталог - это не каталог исходных файлов, а скорее текущий каталог того, кто выполняет программу.

Если вы запускаете программу из оболочки (будь то bash или команда Windows)строка), программа наследует текущий каталог из вашей оболочки.

Вы должны изменить текущий каталог на cd myfolder перед выполнением программы или вызвать os.Chdir("myfolder") в исходном файле Go.(os.Chdir не влияет на текущий каталог вашей оболочки)

Если вы хотите рекурсивно перечислить каталог, вы должны пройти его.См. filepath.Walk .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...