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+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告