开放的编程资料库

当前位置:我爱分享网 > Go教程 > 正文

如何在Golang中使用目录

Go目录教程展示了如何在Golang中使用目录。我们创建目录、删除它们、重命名它们并列出它们的内容。

目录定义

目录是计算机文件系统中用于存储和定位文件的单位。目录按层次结构组织成树。目录具有父子关系。目录有时也称为文件夹。

我们使用osfilepath包。

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

未经允许不得转载:我爱分享网 » 如何在Golang中使用目录

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏