関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
ちょっとしたことなんですが、Goで通貨型を扱いたいときがあったので
情報さがしてみた所、以下のライブラリを発見。
シンプルで使いやすいライブラリでした。以下、軽くつかってみたサンプル。
サンプル
main.go
package main import ( "context" "errors" "fmt" "log" "time" "github.com/bojanz/currency" ) func init() { log.SetFlags(log.Lmicroseconds) } func main() { var ( rootCtx = context.Background() mainCtx, mainCxl = context.WithTimeoutCause(rootCtx, time.Second, errors.New("too slow")) procCtx = run(mainCtx) err error ) defer mainCxl() select { case <-mainCtx.Done(): err = context.Cause(mainCtx) case <-procCtx.Done(): if err = context.Cause(procCtx); errors.Is(err, context.Canceled) { err = nil } } if err != nil { log.Fatal(err) } } func run(ctx context.Context) context.Context { ctx, cxl := context.WithCancelCause(ctx) go func() { cxl(proc(ctx)) }() return ctx } func proc(_ context.Context) error { type data struct { v string c string l string } items := []data{ {"129", "JPY", "ja"}, {"129", "USD", "en"}, {"129", "EUR", "fr"}, } for _, item := range items { var ( amount currency.Amount locale currency.Locale formatter *currency.Formatter err error ) locale = currency.NewLocale(item.l) formatter = currency.NewFormatter(locale) amount, err = currency.NewAmount(item.v, item.c) if err != nil { return err } fmt.Println(formatter.Format(amount)) } return nil }
実行すると以下のように出力されます。
Taskfile.yml
# https://taskfile.dev version: '3' tasks: default: cmds: - task: run run: cmds: - go run main.go
shell
$ task task: [run] go run main.go ¥129 $129.00 129,00 €
try-golang-extlib/examples/singleapp/currency at main · devlights/try-golang-extlib · GitHub
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。