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.
Masalah asas yang cuba diselesaikan ini ialah cara anda mahu menjalankan berbilang tugas berdasarkan permintaan yang anda terima.
Pertimbangkan senario berikut.
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 -
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 }
Seperti yang anda boleh perhatikan betapa baiknya kod itu boleh dibaca dan boleh dilaksanakan. Proses pemikiran dan rangka kerja ini boleh meningkatkan kebolehbacaan kod.
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 }
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.
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 }
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 }
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!