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教程。
