Go語言程式:顯示目錄下的所有子目錄


在這篇Go語言文章中,我們將編寫一個Go語言程式,使用Go程式語言中的`open()`函式、`walk`函式以及`readdir`函式來顯示給定目錄下的所有子目錄。

方法一

在這個例子中,我們將編寫一個Go語言程式,使用`os`包中的`os.Open()`函式來顯示目錄中的所有子目錄。顯示給定目錄中子目錄最簡單的方法之一是使用`**os.Open()**`函式。

示例

package main

import (
   "fmt"
   "os"
)

func main() {
   dirPath := "new"
   dir, err := os.Open(dirPath)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer dir.Close()

   files, err := dir.Readdir(0)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("The required directories are:")
   for _, file := range files {
      if file.IsDir() {
         fmt.Println(file.Name())
      }
   }
}

輸出

The required directories are:
go directory
new directory
new1

方法二

另一種顯示給定目錄中子目錄的方法是使用`**filepath.Walk()**`函式。此函式接收目錄路徑和回撥函式作為輸入,並遍歷目錄樹,為樹中的每個檔案或目錄呼叫回撥函式。然後,回撥函式可以檢查每個檔案或目錄的`**os.FileInfo**`物件並採取適當的操作,例如將目錄名新增到列表中。

示例

package main

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

func main() {
   dirPath := "new"
   var dirs[]string

   err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error {
      if info.IsDir() {
         dirs = append(dirs, info.Name())
      }
      return nil
   })
   if err != nil {
      fmt.Println(err)
      return
   }
   for _, dir := range dirs {
      fmt.Println(dir)
   }
}

輸出

new
go directory
new directory
new1

方法三

顯示給定目錄中子目錄的第三種方法是使用`**ioutil.ReadDir()**`函式。此函式接收目錄路徑作為輸入,並返回`**os.FileInfo**`物件的切片,類似於`**os.Open()**`方法。為了只顯示目錄,我們可以遍歷切片並檢查每個`**os.FileInfo**`物件的`**IsDir()**`方法。

示例

package main

import (
   "fmt"
   "io/ioutil"
)

func main() {
   dirPath := "new"
   files, err := ioutil.ReadDir(dirPath)
   if err != nil {
      fmt.Println(err)
      return
   }

   for _, file := range files {
      if file.IsDir() {
         fmt.Println(file.Name())
      }
   }
}

輸出

go directory
new directory
new1

結論

我們已經成功編譯並執行了一個Go語言程式,用於顯示目錄中的所有子目錄。我們使用了三種不同的方法來使用Go顯示給定目錄中的所有子目錄。方法的選擇將取決於您特定用例的要求。無論選擇哪種方法,Go程式語言都提供了一種簡單直接的方法來完成此任務。

更新於:2023年5月3日

瀏覽量:123

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.