Go語言程式:獲取匹配指定萬用字元模式的檔名列表


Go語言的一個特性是能夠基於指定模式搜尋和檢索檔案。在本文中,我們將討論在Go語言中獲取匹配指定萬用字元模式的檔名列表的不同方法,併為每種方法提供語法和示例。

方法一:使用“filepath.glob”

“filepath.Glob”方法是檢索匹配指定萬用字元模式的檔名列表的最簡單、最直接的方法。該函式接受一個模式作為輸入,並返回一個匹配該模式的字串切片。

語法

filenames, err := filepath.Glob(pattern)

“filepath.Glob”函式接受一個字串引數`pattern`,即您要匹配的萬用字元模式。該函式返回兩個值:`files`,這是一個表示匹配該模式的檔名的字串切片;以及`err`,這是一個錯誤值。如果函式呼叫成功,`err`將為`nil`。

演算法

  • 步驟1 - 在您的Go程式中匯入“path/filepath”包。

  • 步驟2 - 使用您要匹配的萬用字元模式定義一個`pattern`變數。

  • 步驟3 - 使用`pattern`作為輸入呼叫“filepath.Glob”函式,並將返回的結果儲存在一個變數中。

  • 步驟4 - 檢查呼叫“filepath.Glob”函式時是否發生錯誤。如果發生錯誤,列印錯誤訊息並返回。

  • 步驟5 - 列印匹配該模式的檔名列表。

示例

在這個示例中,我們將使用Go語言的內部包filepath.glob來獲取匹配指定萬用字元模式的檔名列表。

package main
import (
   "fmt"
   "path/filepath"
)
 
func main() {
   pattern := "*.txt"
   files, err := filepath.Glob(pattern)
   if err != nil {
      fmt.Println("Error:", err)
      return
   }
   fmt.Println("Files:", files)
}

輸出

Files: []

方法二:使用“ioutil.ReadDir”

“ioutil.ReadDir”方法也可用於檢索匹配指定模式的檔名列表。該函式接受一個目錄路徑作為輸入,並返回一個“os.FileInfo”結構的切片,這些結構表示目錄中的檔案。然後,我們可以根據模式過濾檔案並檢索檔名。

語法

ioutil.ReadDir(dir)

“ioutil.ReadDir”函式接受一個字串引數`dirPath`,即您要讀取的目錄的路徑。該函式返回兩個值:`files`,這是一個表示目錄中檔案的os.FileInfo物件的切片;以及`err`,這是一個錯誤值。如果函式呼叫成功,`err`將為`nil`。

filepath.Match(pattern, file.Name())

“filepath.Match”函式接受兩個字串引數:`pattern`,即您要匹配的萬用字元模式;以及`name`,即您要與該模式匹配的檔名。該函式返回兩個值:`match`,這是一個布林值,指示模式和檔名是否匹配;以及`err`,這是一個錯誤值。如果函式呼叫成功,`err`將為`nil`。

演算法

  • 步驟1 - 在您的Go程式中匯入“io/ioutil”和“path/filepath”包。

  • 步驟2 - 使用您要匹配的萬用字元模式定義一個`pattern`變數。

  • 步驟3 - 使用目錄路徑作為輸入呼叫“ioutil.ReadDir”函式,並將返回的結果儲存在一個變數中。

  • 步驟4 - 檢查呼叫“ioutil.ReadDir”函式時是否發生錯誤。如果發生錯誤,列印錯誤訊息並返回。

  • 步驟5 - 初始化一個空的字串切片來儲存檔名。

  • 步驟6 - 遍歷“ioutil.ReadDir”返回的結果中的每個檔案。

  • 步驟7 - 使用`pattern`和檔名作為輸入呼叫“filepath.Match”函式,並將結果儲存在一個變數中。

  • 步驟8 - 如果“filepath.Match”的結果為真,則將檔名新增到檔名切片中。

  • 步驟9 - 對“ioutil.ReadDir”返回的結果中的所有檔案重複步驟6到8。

  • 步驟10 - 列印匹配該模式的檔名列表。

示例

在這個示例中,我們將使用Go語言的內部包ioutil.ReadDir來獲取匹配指定萬用字元模式的檔名列表。

package main
import (
   "fmt"
   "io/ioutil"
   "path/filepath"
)
 
func main() {
   pattern := "*.go"
   files, err := ioutil.ReadDir(".")
   if err != nil {
      fmt.Println("Error:", err)
      return
   }
   var matchingFiles []string
   for _, file := range files {
      match, err := filepath.Match(pattern, file.Name())
      if err != nil {
         fmt.Println("Error:", err)
         return
      }
      if match {
         matchingFiles = append(matchingFiles, file.Name())
      }
   }
   fmt.Println("Files:", matchingFiles)
}

輸出

Files: [main.go]

結論

這是在Go語言中檢索匹配指定萬用字元模式的檔名列表的兩種方法。這兩種方法都非常簡單,可以輕鬆地實現到您的Go程式中。“filepath.Glob”方法推薦用於大多數用例,但是當您需要更多地控制檔案過濾過程時,“ioutil.ReadDir”方法會很有用。

更新於:2023年2月22日

3K+ 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

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