Go語言遍歷目錄的三種方法舉例
一、寫在前面
| 中文名 | 英文名 | 說明 |
|---|---|---|
| 目錄 | directory | 一系列文件和文件夾的集合 |
| 文件夾 | folder | 用來存放文件和文件夾的容器 |
| 文件 | file | 用來存儲信息的單個數(shù)據(jù)單元(文本、圖像、聲音等等) |
| 路徑 | path | 用于定位文件的路徑 |
我們用命令行 tree /? 和 tree /F 來查詢樹形目錄,如下所示:
D:\Go_WorkSpace\p3-traversal>tree /?
以圖形顯示驅(qū)動器或路徑的文件夾結(jié)構(gòu)。TREE [drive:][path] [/F] [/A]
/F 顯示每個文件夾中文件的名稱。
/A 使用 ASCII 字符,而不使用擴展字符。
D:\Go_WorkSpace\p3-traversal>tree /F
文件夾 PATH 列表
卷序列號為 277B-1704
D:.
│ go.mod
│ main_filepath_glob.go
│ main_filepath_walk.go
│ main_ioutil_ReadDir.go
│
└─父目錄
│ 1.txt
│
└─子目錄
│ 21.txt
│ 22.txt
│ 23.txt
│
└─孫目錄
31.txt
32.txt
二、使用 ioutil.ReadDir
- 此方法讀取目錄的內(nèi)容,并返回目錄中每個文件或目錄的
fs.FileInfo對象切片; - 可以使用
for循環(huán)遍歷切片并打印出每個文件或目錄的名稱;
示例如下:
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
files, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file.Name())
}
}
結(jié)果輸出:
D:\Go_WorkSpace\p3-traversal>go run main_ioutil_ReadDir.go
go.mod
main_filepath_glob.go
main_filepath_walk.go
main_ioutil_ReadDir.go
父目錄
分析說明:
1、僅打印當前目錄,不含子孫目錄;
2、不會打印出.和..等特殊的目錄;
三、使用 filepath.Walk
- 此方法遍歷根位于指定目錄的文件樹(
a file tree),并為遇到的每個文件或目錄調(diào)用函數(shù); - 可以使用匿名函數(shù)(
an anonymous function)打印出每個文件或目錄的名稱
示例如下:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
fmt.Println(path)
return nil
})
if err != nil {
fmt.Println(err)
}
}
結(jié)果輸出:
D:\Go_WorkSpace\p3-traversal>go run main_filepath_walk.go
.
go.mod
main_filepath_glob.go
main_filepath_walk.go
main_ioutil_ReadDir.go
父目錄
父目錄\1.txt
父目錄\子目錄
父目錄\子目錄\21.txt
父目錄\子目錄\22.txt
父目錄\子目錄\23.txt
父目錄\子目錄\孫目錄
父目錄\子目錄\孫目錄\31.txt
父目錄\子目錄\孫目錄\32.txt
分析說明:
1、打印當前目錄,含子孫目錄;
2、包含.等特殊的目錄,遍歷時需要排除;
四、使用 filepath.Glob
- 此方法返回與指定模式匹配的文件名列表;
- 可以使用通配符(
*)來匹配當前目錄中的所有文件
示例如下:
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
func main() {
pwd, _ := os.Getwd()
filePaths, err := filepath.Glob(filepath.Join(pwd, "*"))
if err != nil {
log.Fatal(err)
}
for _, filePath := range filePaths {
fmt.Println(filePath)
}
}
結(jié)果輸出:
D:\Go_WorkSpace\p3-traversal>go run main_filepath_glob.go
D:\Go_WorkSpace\p3-traversal\go.mod
D:\Go_WorkSpace\p3-traversal\main_filepath_glob.go
D:\Go_WorkSpace\p3-traversal\main_filepath_walk.go
D:\Go_WorkSpace\p3-traversal\main_ioutil_ReadDir.go
D:\Go_WorkSpace\p3-traversal\父目錄
分析說明:
1、僅打印當前目錄,不含子孫目錄;
2、不會打印出.和..等特殊的目錄;
3、返回的是絕對路徑;
總結(jié)
到此這篇關(guān)于Go語言遍歷目錄的三種方法的文章就介紹到這了,更多相關(guān)Go遍歷目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Goland 提示 Unresolved reference 錯誤的問題
這篇文章主要介紹了解決Goland 提示 Unresolved reference 錯誤的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言中字符串與字節(jié)切片轉(zhuǎn)換的詳細過程
在Go語中,字符串(string)和字節(jié)切片([]byte)是處理文本和二進制數(shù)據(jù)的重要類型,理解它們的轉(zhuǎn)換機制及底層表示形式,是編寫高效代碼的關(guān)鍵,本文將深入探討字符串與字節(jié)切片的轉(zhuǎn)換過程,并通過示例和流程圖幫助讀者掌握其核心原理,需要的朋友可以參考下2025-05-05
從前端轉(zhuǎn)go的一些感悟?qū)Ρ?附詳細代碼)
從前端開發(fā)轉(zhuǎn)向 Go(Golang)后端開發(fā),是一個非??尚幸埠軐嵱玫姆较?特別是在做高性能微服務(wù)、分布式系統(tǒng)、云原生(如Kubernetes)等方面,這篇文章主要介紹了從前端轉(zhuǎn)go的一些感悟?qū)Ρ?需要的朋友可以參考下2026-04-04
Golang跳轉(zhuǎn)語句continue與goto使用語法詳解
這篇文章主要介紹了Golang跳轉(zhuǎn)語句continue與goto使用語法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01

