関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。たまに使いたいときに諸々忘れているので、ここにメモメモ。。。
slim-sprigは、Task内部で利用されているテンプレート向け共通ユーティリティです。
元々、sprig というライブラリがあり、それを Task チームがフォークしてスリム版としてリリースしている模様。
使い方は、本家の sprig と同じで、Template.Funcs にそれぞれのライブラリの関数マップを渡すだけです。
- masterminds/sprig
import "github.com/Masterminds/sprig/v3" template.New("xxx").Funcs(sprig.FuncMap())
- go-task/slim-sprig
import "github.com/go-task/slim-sprig/v3" template.New("xxx").Funcs(sprig.FuncMap())
本家の方が関数多いのですが、実際に利用する関数って大抵決まっているので、個人的にスリムな方を使うことが多いです。
サンプル
slimsprig/load/main.go
package main import ( "cmp" "fmt" "log" "maps" "slices" "text/template" sprig "github.com/go-task/slim-sprig/v3" ) func main() { log.SetFlags(0) if err := run(); err != nil { log.Fatal(err) } } func run() error { // // slim-sprigの関数マップをロードしてテンプレート処理 // const ( TEXT = ` {{- .Str | upper | repeat 3}} {{now | date "2006-01-02"}} {{list "hello" "world" | join "-"}}` ) var ( m = sprig.FuncMap() t = template.Must(template.New("my").Funcs(m).Parse(TEXT)) d = map[string]any{"Str": "hello"} err error ) if err = t.Execute(log.Writer(), d); err != nil { return err } // // ライブラリで公開される関数を出力 // log.Println("\n------- funcs") const ( nChunks = 8 ) var ( funcNames = slices.Collect(maps.Keys(m)) maxWords = slices.MaxFunc(funcNames, func(x, y string) int { return cmp.Compare(len(x), len(y)) }) ) slices.Sort(funcNames) { for chunk := range slices.Chunk(funcNames, nChunks) { for name := range slices.Values(chunk) { fmt.Fprintf(log.Writer(), "%-*s", len(maxWords)+1, name) } log.Println("") } } log.Println("") return nil }
Go1.23で追加された iter サポートのお陰で、スライスの処理は本当に楽になりましたねー。チャンク処理とか自前で書かなくて良いのは楽です。
Taskfile.yml
# https://taskfile.dev version: '3' tasks: default: cmds: - go run .
実行結果
$ task task: [default] go run . HELLOHELLOHELLO 2025-09-08 hello-world ------- funcs add add1 adler32sum ago all any append atoi b32dec b32enc b64dec b64enc base biggest cat ceil chunk clean coalesce compact concat contains date dateInZone dateModify date_in_zone date_modify deepEqual default dict dig dir div duration durationRound empty env expandenv ext fail first float64 floor fromJson get getHostByName has hasKey hasPrefix hasSuffix hello htmlDate htmlDateInZone indent initial int int64 isAbs join keys kindIs kindOf last list lower max maxf min minf mod mul mustAppend mustChunk mustCompact mustDateModify mustFirst mustFromJson mustHas mustInitial mustLast mustPrepend mustPush mustRegexFind mustRegexFindAll mustRegexMatch mustRegexReplaceAll mustRegexReplaceAllLiteral mustRegexSplit mustRest mustReverse mustSlice mustToDate mustToJson mustToPrettyJson mustToRawJson mustUniq mustWithout must_date_modify nindent now omit osBase osClean osDir osExt osIsAbs pick pluck plural prepend push quote randInt regexFind regexFindAll regexMatch regexQuoteMeta regexReplaceAll regexReplaceAllLiteral regexSplit repeat replace rest reverse round seq set sha1sum sha256sum slice sortAlpha split splitList splitn squote sub substr ternary title toDate toDecimal toJson toPrettyJson toRawJson toString toStrings trim trimAll trimPrefix trimSuffix trimall trunc tuple typeIs typeIsLike typeOf uniq unixEpoch unset until untilStep upper urlJoin urlParse values without
参考情報
GitHub - go-task/slim-sprig: Useful template functions for Go templates.
GitHub - Masterminds/sprig: Useful template functions for Go templates.
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。