go - 通过另一个文件导入时,仅使用 ioutils ReadDir 扫描当前目录中的文件
问题描述
我遇到了 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
在执行程序或调用os.Chdir("myfolder")
Go 源文件之前,您必须更改当前目录。(os.Chdir
不影响你的 shell 的当前目录)
如果你想递归地列出一个目录,你必须遍历它。请参阅文件路径.Walk。
推荐阅读
- javascript - 如何使用 Tampermonkey 在网页上加载外部脚本?
- android - Activity 无法转换为 LifecycleOwner
- excel - 如何使用 2 或 3 个用户名和密码在用户表单中创建登录名?
- windows - 用于在多个远程服务器上跟踪日志文件的 PowerShell 脚本
- javascript - 如何在 Visual Studio Code 中使用 TypeScript 和 JavaScript 禁用自动导入的自动分号?
- java - 输入学生成绩,对其进行平均,然后按成绩对学生进行排名
- java - 崇高文本3上的Java用户控制台输入不起作用
- c - 将 char 字符串转换为 int 但无法将 char 从 char 字符串转换为 int?
- java - stdDraw 在背景上绘制 java
- java - 附加时 FileWriter 是否只是简单地复制和重写文件,还是将文本物理附加到指定的 file-java