Go 列出目录
最后修改时间 2024 年 4 月 11 日
在本文中,我们将展示如何在 Golang 中使用目录。我们创建目录、删除目录、重命名目录以及列出目录内容。
目录定义
目录是计算机文件系统中用于存储和定位文件的单元。目录以层级结构组织成树状。目录具有父子关系。目录有时也称为文件夹。
我们使用 os
和 filepath
包。
使用 os.Mkdir 创建 Go 目录
os.Mkdir
使用指定的名称和权限位创建一个新目录。
package main import ( "log" "os" ) func main() { err := os.Mkdir("tmp", 0755) if err != nil { log.Fatal(err) } }
示例创建一个名为 tmp
的目录。0755
表示所有人都有读和执行权限,文件所有者也有写权限。
使用 os.MkdirAll 创建多个 Go 目录
MkdirAll
函数会创建目录,包括所有必需的父目录,并返回 nil
,否则返回一个错误。权限位用于函数创建的所有目录。如果目录已存在,MkdirAll
不执行任何操作并返回 nil
。
package main import ( "fmt" "log" "os" ) func main() { path := "tmp/doc/new" err := os.MkdirAll(path, 0755) if err != nil { log.Fatal(err) } fmt.Println("directory created") }
在此代码示例中,我们创建一个名为 new
的目录及其父目录。
使用 os.Getwd 获取当前工作目录
os.Getwd
返回一个指向当前目录的根路径名。
package main import ( "fmt" "log" "os" ) func main() { path, err := os.Getwd() if err != nil { log.Println(err) } fmt.Println(path) }
示例打印当前工作目录。这是我们启动程序的目录。
检查目录是否存在
IsNotExist
返回一个布尔值,指示错误是否已知报告文件或目录不存在。
package main import ( "fmt" "os" ) func main() { path := "tmp" if _, err := os.Stat(path); os.IsNotExist(err) { os.Mkdir(path, 0755) fmt.Println("Directory created") } else { fmt.Println("Directory already exists") } }
在此代码示例中,如果目录不存在,我们则创建它。如果目录存在,我们则打印一条消息。
if _, err := os.Stat(path); os.IsNotExist(err) {
首先,我们使用 Stat
函数,它返回描述文件的 FileInfo 结构。如果此函数返回错误,我们使用 IsNotExist
来确定错误是否由目录已存在引起。
使用 os.Rename 重命名目录
Rename
函数将源重命名(移动)到目标。
package main import ( "fmt" "log" "os" ) func main() { oldpath := "tmp" newpath := "tmp2" err := os.Rename(oldpath, newpath) if err != nil { log.Fatal(err) } fmt.Println("directory renamed") }
示例将目录 tmp
重命名为 tmp2
。
使用 os.Remove 删除目录
使用 os.Remove
函数,我们可以删除单个目录;该目录必须为空。
package main import ( "log" "os" ) func main() { err := os.Remove("tmp") if err != nil { log.Fatal(err) } }
示例删除一个空的 tmp
目录。
使用 os.RemoveAll 删除目录及其内容
RemoveAll
会递归地删除目录及其内容。
package main import ( "log" "os" ) func main() { err := os.RemoveAll("tmp") if err != nil { log.Fatal(err) } }
示例删除 tmp
目录及其所有文件和子目录。
使用 filepath.Glob 列出目录
filepath.Glob
返回所有匹配模式的文件名,如果没有匹配的文件则返回 nil
。
func Glob(pattern string) (matches []string, err error)
这是 filepath.Glob
函数的语法。
package main import ( "fmt" "log" "path/filepath" ) func main() { files, err := filepath.Glob("/home/janbodnar/Documents/prog/golang/**/*.go") if err != nil { log.Fatal(err) } for _, file := range files { fmt.Println(file) } }
示例列出给定目录中的所有 Go 文件。使用 **
模式,列出是递归的。
来源
在本文中,我们已在 Go 中使用过目录。