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

开启您的职业生涯

完成课程获得认证

开始学习
广告