Pergi Transformers

DDD
DDDasal
2024-11-15 16:10:03682semak imbas

Go Transformers

Go-Utils

go-utils ialah perpustakaan yang bertujuan menyediakan perpustakaan berguna dalam go untuk mengurangkan usaha pembangun dalam membina barangan dan meningkatkan
produktiviti.

Beberapa fungsi dinyatakan di bawah.

Pelari Tugas

Masalah asas yang cuba diselesaikan ini ialah cara anda mahu menjalankan berbilang tugas berdasarkan permintaan yang anda terima.
Pertimbangkan senario berikut.

  • processA memproses satu senario dan boleh menghasilkan ralat.
  • processB memproses senario kedua dan boleh menghasilkan ralat.

Seperti yang anda lihat semua proses ini boleh mengakibatkan ralat. Sememangnya Golang sangat verbose dalam pengendalian ralat. Kadang-kadang kita tidak mahu melihat kod berlebihan itu.
Juga ini mengurangkan kebolehbacaan.

Sekarang pertimbangkan senario lain -
Sebaik sahaja anda mengendalikan ralat untuk prosesA dan anda terlupa untuk prosesB, Golang tidak akan membuang ralat masa penyusunan menyebabkan anda terlepas kes ini. Ketinggalan kecil boleh menyebabkan malapetaka. Walaupun kita sepatutnya mengikuti banyak proses sebelum penghantaran untuk prod tanya diri anda adakah anda sentiasa mengikuti atau tidak?

Untuk menyelesaikannya, saya telah membangunkan pendekatan di mana anda akan berada
lebih tertumpu pada menulis perkara yang penting dan betapa mudahnya untuk melihat fn dan memahami perkara yang dilakukannya. Ini juga akan membantu dalam mengatasi pembayang berubah-ubah. Kejadian di mana kita mempunyai berbilang ralat yang didakwa, pembayang ralat boleh berlaku dan ini boleh menjadi buruk. Mengikuti corak dan pengekodan yang betul ini boleh membantu dalam mengelakkan senario pelik seperti itu.

Contoh -

Kod dengan pengendalian ralat berlebihan dan kebolehbacaan yang berkurangan.

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
}

Kod dengan pelari tugas

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
}

Seperti yang anda boleh perhatikan betapa baiknya kod itu boleh dibaca dan boleh dilaksanakan. Proses pemikiran dan rangka kerja ini boleh meningkatkan kebolehbacaan kod.

Penggemar Go-routine

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
}

Utiliti Strim

Kita semua tahu fungsi lambda dan anak panah yang terkenal. Golang
sememangnya tidak menyokong sintaks anak panah. Alangkah baiknya jika ada
yang di golang. Buat masa ini, anggap kita perlu melakukan beberapa operasi Peta yang
adalah keadaan menjadi sukar. Anda bersedia untuk pelaksanaan yang hebat
daripada saya untuk menyelesaikannya untuk anda. Selepas pelaksanaan di bawah ini saya akan
minta anda memikirkan sendiri bagaimana ini akan dilaksanakan.

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)

}

Contoh di atas adalah untuk penukaran rentetan kepada float64.
Ini akan mengendalikan ralat untuk anda jika ada. Satu-satunya pengecualian adalah mungkin terdapat ralat masa jalan jika ada
Taipkan Isu Cast Jadi berhati-hati dengan ini. Cuba tulis kes ujian
yang sepatutnya mengelakkan isu ini.

Kombo Maut Penapis dan Pemeta

Tambahan kepada fungsi dibuat sekarang, penapisan juga berfungsi.
Happy time guys!!

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
}

Import perpustakaan ke projek anda untuk membina bahan yang menarik.

pergi dapatkan -u github.com/mahadev-k/go-utils@v1.0.1

Tambahkan ini pada go.mod anda.
Gunakannya seperti yang dilakukan dalam modul contoh.

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
}

Contoh mudah

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
}

Lihat repo:
Github: https://github.com/mahadev-k/go-utils

Memandangkan anda telah membaca ini dan menyukainya. Jika anda ingin berhubung dengan saya
Ikuti saya di X - https://x.com/mahadev_k_
Linkedin - https://in.linkedin.com/in/mahadev-k-934520223
Cadangkan lebih banyak idea untuk sumbangan kepada repo ini jika berminat.
Terima kasih??

Atas ialah kandungan terperinci Pergi Transformers. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn