Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencapai Kesetaraan Pemahaman Senarai Python dalam Go?
Setara dengan Pemahaman Senarai Python dalam Go
Ramai pembangun mendapati sukar untuk melaksanakan tugas yang kelihatan mudah dalam Go berbanding bahasa lain seperti Python. Satu tugas sedemikian ialah mereplikasi sintaks pemahaman senarai Python.
Untuk mencapai binaan yang setara dalam Go, pertimbangkan pendekatan berikut:
1. Menggunakan Pustaka "penapis":
Seperti yang dicadangkan oleh Rob Pike, pustaka "penapis" menyediakan kaedah yang dipanggil Choose() yang mengembalikan kepingan yang mengandungi elemen yang memenuhi syarat yang ditentukan. Contohnya:
import ( "github.com/google/go-cmp/cmp" "go.opencensus.io/plugin/ochttp" "golang.org/x/exp/slices" ) var ( a = []int{1, 2, 3, 4, 5, 6, 7, 8, 9} b = []int{2, 4, 6, 8} ) func TestChoose(t *testing.T) { result := ochttp.Choose(a, func(v int) bool { return v%2 == 0 }) if !cmp.Equal(result, b) { t.Errorf("TestChoose() failed, got %v, want %v", result, b) } }
2. Menggunakan For Loops:
Walaupun terdapat perpustakaan seperti "penapis," Go's for loops kekal sebagai alternatif yang cekap. GoDoc untuk pustaka "penapis" secara eksplisit mengesyorkan penggunaan untuk gelung apabila kecekapan membimbangkan.
3. Menggunakan Go Generics (datang dalam Go 1.18):
Dengan pengenalan generik yang akan datang dalam Go, adalah mungkin untuk melaksanakan mapreduce menggunakan generik. Contohnya:
func MapReduce[T, V, R any](in <-chan T, out chan<- R, mapFn func(T) V, reduceFn func(V, V) R) { v := make(chan V, 10) defer close(v) go func() { for t := range in { v <- mapFn(t) } }() r := make(chan R, 10) defer close(r) go func() { var acc R for v := range v { acc = reduceFn(acc, v) } r <- acc }() return <-r }
Pelaksanaan ini menerima saluran jenis T, menggunakan fungsi pemetaan pada setiap elemen dan menyimpan keputusan dalam saluran jenis V. Satu lagi goroutine menggunakan saluran nilai yang dipetakan dan berulang kali menggunakan fungsi pengurangan untuk menghasilkan hasil jenis R. Hasilnya kemudian dikembalikan sebagai saluran jenis R.
Kesimpulan:
Sementara sintaks pemahaman senarai Python menyediakan cara ringkas untuk mengubah data, Go menawarkan alternatif yang cekap menggunakan untuk gelung atau perpustakaan seperti "penapis." Dengan pengenalan generik dalam Go 1.18, mekanisme transformasi data yang lebih cekap dan serba boleh akan tersedia.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kesetaraan Pemahaman Senarai Python dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!