Go语言程序递归创建目录


在这篇 Go 语言文章中,我们将编写一个程序,使用 os.MkdirAll() 函数以及递归来递归创建目录。Go 的主要用例之一是创建可扩展和并发应用程序。

方法 1

在本例中,我们将编写一个 Go 语言程序,使用 os 包中的 MkdirAll() 函数递归创建目录。在 Go 语言中,递归创建目录最简单的方法是使用此函数。此函数接受文件路径作为参数,并创建路径中所有缺失的目录。

语法

funcMkdirAll(path string, perm FileMode) error

mkdirAll() 函数位于 os 包中,用于创建具有相应父目录的目录。该函数接受两个参数,一个是应创建的目录的名称。如果创建目录时出现问题,该函数将返回错误。

算法

  • 首先,我们需要在 Go 代码中导入 **os** 和 **fmt** 包。

  • 然后,启动 main() 函数。在 main() 中调用 **os.MkdirAll** 函数,传入文件路径和所需的权限(以八进制表示)作为参数。

  • 检查 **os.MkdirAll** 函数的返回值。如果它不等于 nil,则在创建目录时发生错误。

  • 如果返回值等于 **nil**,则目录已成功创建。

示例 1

以下示例将使用 Go 语言中的 os.mkdirall 函数递归创建目录。

package main

import (
   "fmt"
   "os"
)

func main() {
   err := os.MkdirAll("/newone/again", 0777)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Directory hierarchy created successfully")
}

输出

Directory hierarchy created successfully

方法 2

在 Go 语言中递归创建目录的另一种方法是使用 **os.Mkdir** 函数以及递归。在此方法中,我们创建一个递归函数,该函数接受文件路径作为参数,并逐个创建目录。

算法

  • 首先,我们需要在 Go 代码中导入 **os** 和 **path/filepath** 包。

  • 然后启动 main() 函数。在 main() 中定义一个递归函数 **createDirectory**,该函数接受文件路径作为参数。

  • 在 **createDirectory** 函数内部,使用 **os.Stat** 函数检查目录是否已存在。

  • 如果目录存在,则停止函数的进一步执行。

  • 如果目录不存在,则使用 **os.IsNotExist** 函数检查 **os.Stat** 返回的错误。

  • 如果错误是 **os.IsNotExist**,则再次调用 **createDirectory** 函数,传入当前目录的父目录。

  • 创建父目录后,使用 **os.Mkdir** 函数创建当前目录。

  • 如果 **os.Mkdir** 调用成功,则返回 **nil**,否则返回 **os.Mkdir** 返回的错误。

  • 调用 **createDirectory** 函数,传入文件路径,以启动目录创建过程。

  • 检查 **createDirectory** 函数的返回值。如果它不等于 **nil**,则在创建目录时发生错误。

  • 如果返回值等于 **nil**,则目录已成功创建。

示例

以下示例是使用 os.mkdir 和递归递归创建目录的 Go 语言程序

package main

import (
   "fmt"
   "os"
   "path/filepath"
)

func createDirectory(path string) error {
   // Check if the directory exists
   _, err := os.Stat(path)
   if err == nil {
      return nil
   }
   // If the directory does not exist, create its parent
   if os.IsNotExist(err) {
      err = createDirectory(filepath.Dir(path))
      if err != nil {
         return err
      }
      // Create the directory
      err = os.Mkdir(path, 0777)
      if err != nil {
         return err
      }
   }
   return nil
}

func main() {
   err := createDirectory("/tmp/a/b/c")
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Directory hierarchy created successfully")
}

输出

Directory hierarchy created successfully

结论

我们已成功编译并执行了一个 Go 语言程序来递归创建目录以及示例。在本文中,我们探讨了在 Go 语言中递归创建目录的两种方法。第一种方法使用 **os.MkdirAll()** 函数,而第二种方法使用 **os.Mkdir()** 函数以及递归。这两种方法都简单易用,并允许您轻松地在 Go 语言中创建目录层次结构。

更新于: 2023年5月3日

2K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告