go-utils は、Go で便利なライブラリを提供し、開発者のビルド作業や
の労力を軽減することを目的としたライブラリです。
生産性。
いくつかの機能については以下で説明します。
これが解決しようとしている基本的な問題は、受け取ったリクエストに基づいて複数のタスクをどのように実行するかということです。
次のシナリオを考えてみましょう。
ご覧のとおり、これらすべてのプロセスでエラーが発生する可能性があります。本質的に、Golang はエラー処理において非常に冗長です。場合によっては、その冗長なコードを見たくないことがあります。
これにより、可読性が低下します。
次に別のシナリオを考えてみましょう -
processA のエラーを処理し、processB のエラーを忘れると、Golang はコンパイル時エラーをスローして、このケースを見逃すことはありません。小さなミスが大混乱を引き起こす可能性があります。製品に出荷する前に多くのプロセスに従うことになっていますが、常に従うかどうか自問してください。
これを解決するために、私は次のようなアプローチを開発しました。
何が重要なのか、そして fn を見てそれが何をするのかを理解するのがいかに簡単かを書くことに重点を置いています。これは、変数のシャドウイングを克服するのにも役立ちます。複数のエラーが割り当てられている場合、エラー シャドウイングが発生する可能性があり、これは悪いことになる可能性があります。このパターンに従い、適切なコーディングを行うと、このような奇妙なシナリオを回避できます。
例 -
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() err := processFoo(ctx, &req) if err != nil { return err } err = processBar(ctx, &req) if err != nil { return err } return nil }
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Then(processFoo). Then(processBar). Result() return err }
ご覧のとおり、コードの読みやすさと実行可能性がどれほど向上しているかがわかります。この思考プロセスとフレームワークにより、コードの可読性が向上します。
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Parallel(processFooParallel). Parallel(processBarParallel). Result() return err }
有名なラムダ関数とアロー関数は誰もが知っています。ゴラン
本質的に矢印構文をサポートしません。あればいいですね
それはgolangで。ここでは、
という Map 操作を実行する必要があるとします。
物事が困難になったときです。素晴らしい実装が待っています
それを解決するために私から。この以下の実装の後、私はこうします
これがどのように実装されるかを自分で考えてください。
func TestMapRunner(t *testing.T) { // Create a map with some values floatingStrings := []string{"0.1", "0.2", "22", "22.1"} res, err := NewTransformer[string, float64](floatingStrings). Map(MapIt[string, float64](func(item string) (float64, error) { return strconv.ParseFloat(item, 64) })). Map(MapIt[float64, float64](func(item float64) (float64, error) { return item * 10, nil })). Result() if err != nil { t.Errorf("Testcase failed with error : %v", err) return } // Output: [0.1 0.2 22 22.1] t.Logf("Result: %v", res) assert.ElementsMatch(t, []any{float64(1), float64(2), float64(220), float64(221)}, res) }
上記の例は、文字列を float64 に変換するものです。
これにより、エラーがある場合に処理されます。唯一の例外は、
がある場合に実行時エラーが発生する可能性があることです。
タイプキャストの問題 したがって、これには注意してください。テストケースを書いてみる
これにより、この問題は回避されるはずです。
機能が追加され、フィルタリングも機能するようになりました。
皆さん、幸せな時間を過ごしてください!!
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() err := processFoo(ctx, &req) if err != nil { return err } err = processBar(ctx, &req) if err != nil { return err } return nil }
go get -u github.com/mahadev-k/go-utils@v1.0.1
これを go.mod に追加します。
例モジュールで行ったように使用します。
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Then(processFoo). Then(processBar). Result() return err }
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Parallel(processFooParallel). Parallel(processBarParallel). Result() return err }
リポジトリをチェックアウトします:
Github: https://github.com/mahadev-k/go-utils
あなたがこれを最後まで読んで気に入ってくれたと考えてください。私と繋がりたい方は
X でフォローしてください - https://x.com/mahadev_k_
Linkedin - https://in.linkedin.com/in/mahadev-k-934520223
ご興味があれば、このリポジトリへの貢献のアイデアをさらに提案してください。
ありがとう??
以上がゴートランスフォーマーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。