Go目录教程展示了如何在Golang中使用目录。我们创建目录、删除它们、重命名它们并列出它们的内容。
目录定义
目录是计算机文件系统中用于存储和定位文件的单位。目录按层次结构组织成树。目录具有父子关系。目录有时也称为文件夹。
我们使用os
和filepath
包。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
使用os.Mkdir创建目录
os.Mkdir
创建一个具有指定名称和权限位的新目录。
package main import ( "log" "os" ) func main() { err := os.Mkdir("tmp", 0755) if err != nil { log.Fatal(err) } }
该示例创建一个名为tmp
的目录。0755
表示每个人都有读取和执行权限,文件所有者也有写入权限。
使用os.MkdirAll创建多个目录
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
函数,它返回描述文件的FileInfostructure。如果此函数返回错误,我们使用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
目录及其所有文件和子目录。
Golistdirectorywithfilepath.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中的目录。
列出所有Go教程。