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 中使用过目录。