ホームページ > バックエンド開発 > Golang > ゴートランスフォーマー

ゴートランスフォーマー

DDD
リリース: 2024-11-15 16:10:03
オリジナル
679 人が閲覧しました

Go Transformers

Go-Utils

go-utils は、Go で便利なライブラリを提供し、開発者のビルド作業や
の労力を軽減することを目的としたライブラリです。 生産性。

いくつかの機能については以下で説明します。

タスクランナー

これが解決しようとしている基本的な問題は、受け取ったリクエストに基づいて複数のタスクをどのように実行するかということです。
次のシナリオを考えてみましょう。

  • processA は 1 つのシナリオを処理し、エラーが発生する可能性があります。
  • processB は 2 番目のシナリオを処理し、エラーが発生する可能性があります。

ご覧のとおり、これらすべてのプロセスでエラーが発生する可能性があります。本質的に、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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート