いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-655 (bmatcuk/doublestar)(`**`をGlobで使えるライブラリ)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

Goの標準ライブラリに搭載されている filepath.Glob 関数さんは ** に対応していません。filepath.Walk 使えば良いのですがGlob関数でパパっとやりたいときもあります。

何か無いのかなって探してみたら以下のライブラリを発見。

github.com

目的にぴったりなライブラリでしたので、ベーシックな使い方を自分用にメモメモ。。。

サンプル

package main

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

    "github.com/bmatcuk/doublestar/v4"
)

func main() {
    const (
        BaseDir = "../../../../" // try-golang-extlib project root-dir
    )
    var (
        basepath string
        pattern  = filepath.Join(BaseDir, "**/main.go")
    )
    basepath, pattern = doublestar.SplitPattern(pattern)
    fmt.Printf("base: %s, pattern: %s\n", basepath, pattern)

    var (
        dirFs   = os.DirFS(basepath)
        matches []string
        err     error
    )
    matches, err = doublestar.Glob(dirFs, pattern)
    if err != nil {
        panic(err)
    }

    fmt.Printf("match count: %d\n", len(matches))
    for v := range slices.Values(matches) {
        fmt.Printf("\t%s\n", v)
    }
}

実行すると以下のようになります。

$ task
task: [default] go run main.go
base: ../../../.., pattern: **/main.go
match count: 39
        cmd/trygolang-extlib/main.go
        examples/etree/read/main.go
        examples/etree/write/main.go
        examples/gobit/main.go
        examples/singleapp/7zip/read-sevenzip/main.go
        examples/singleapp/currency/01.basic/main.go
        examples/singleapp/doublestar/01.basic/main.go
        examples/singleapp/env/01.basic/main.go
        examples/singleapp/env/02.required/main.go
        examples/singleapp/env/03.all-fields-required/main.go
        examples/singleapp/env/04.use-fieldname-by-default/main.go
        examples/singleapp/env/05.default-value/main.go
        examples/singleapp/env/06.value-separator/main.go
        examples/singleapp/env/07.expand/main.go
        examples/singleapp/env/08.not-empty/main.go
        examples/singleapp/env/09.from-file/main.go
        examples/singleapp/flaggy/01.basic/main.go
        examples/singleapp/flaggy/02.subcommand/main.go
        examples/singleapp/flaggy/03.nested-subcommand/main.go
        examples/singleapp/godotenv/01.basic/main.go
        examples/singleapp/godotenv/02.autoload/main.go
        examples/singleapp/godotenv/03.specify-filename/main.go
        examples/singleapp/godotenv/04.read/main.go
        examples/singleapp/godump/basic/main.go
        examples/singleapp/isatty/main.go
        examples/singleapp/jstream/depth/main.go
        examples/singleapp/panicparse/main.go
        examples/singleapp/pdf/01.split-pages/main.go
        examples/singleapp/pdf/02.search-text/main.go
        examples/singleapp/semver/basic/main.go
        examples/singleapp/semver/check/main.go
        examples/singleapp/semver/parse/main.go
        examples/singleapp/semver/sort/main.go
        examples/singleapp/slimsprig/load/main.go
        examples/singleapp/spinner/01.basic/main.go
        examples/singleapp/spinner/02.color/main.go
        examples/singleapp/spinner/03.suffix/main.go
        examples/singleapp/spinner/04.final-message/main.go
        examples/singleapp/spinner/05.styles/main.go

参考情報

github.com

個人的Goのおすすめ書籍

個人的に読んでとても勉強になった書籍さんたちです。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。