go - 当通过另一个文件导入时,仅使用 ioutils ReadDir 扫描当前目录中的文件

标签 go

我在使用 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 中的文件夹和文件?

最佳答案

当前目录不是源文件的目录,而是执行程序的当前目录。

如果您从 shell(无论是 bash 还是 Windows 命令行)执行程序,程序将从您的 shell 继承当前目录。

在执行程序之前,您必须使用 cd myfolder 更改当前目录,或者在您的 Go 源文件中调用 os.Chdir("myfolder")。 (os.Chdir 不会影响您的 shell 的当前目录)

如果你想递归地列出一个目录,你必须遍历它。参见 filepath.Walk .

关于go - 当通过另一个文件导入时,仅使用 ioutils ReadDir 扫描当前目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50669983/

相关文章:

sql - 带有表名 bindvar 的 Postgres sqlx 准备语句

go - 找不到包 "google.golang.org/protobuf/cmd/protoc-gen-go"

go - 调用接口(interface)函数出错?

python - 去 "&^"算子,什么意思?

go - 使用 gorilla mux 指向域去服务器

go - "(type func())"和 "type func()"有什么区别

go - 需要帮助从 Go 消费者将数据排入 Redis 队列

pointers - 指针运算符 -> 对于 golang

go - 使用某些参数调用命令有效但不适用于其他参数但在控制台中有效

data-binding - Go walk 中的基本数据绑定(bind)