Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencipta Saluran Integer Unik dalam Go?
Mencipta Saluran Berbeza dalam Go
Dalam soalan pengaturcaraan ini, seorang pemula dalam Go mencari pendekatan yang cekap untuk menentukan saluran yang menghasilkan nilai unik . Keperluan khusus adalah untuk mencipta saluran yang menerima nilai integer dan hanya menghantar integer yang berbeza. Matlamatnya adalah untuk mengelakkan integer pendua dalam output.
Salah satu respons mencadangkan menggunakan peta untuk menyimpan nilai yang dihantar sebelum ini untuk mencapai fungsi ini. Walaupun kaedah ini boleh menghapuskan nilai pendua dengan berkesan, penggunaan memori adalah pertimbangan. Struktur data peta memerlukan memperuntukkan dan mengekalkan koleksi pasangan nilai kunci, yang berpotensi menyebabkan kebocoran memori jika tidak diurus dengan teliti.
Untuk menyediakan penyelesaian praktikal, coretan kod berikut memperkenalkan fungsi UniqueGen, yang menjana saluran integer unik dalam julat yang ditentukan:
<code class="go">func UniqueGen(min, max int) <-chan int { m := make(map[int]struct{}, max-min) ch := make(chan int) go func() { for i := 0; i < 1000; i++ { v := min + rand.Intn(max) if _, ok := m[v]; !ok { ch <- v m[v] = struct{}{} } } close(ch) }() return ch }</code>
Fungsi UniqueGen menggunakan peta untuk merekodkan integer yang dihantar. Ia memulakan goroutine yang berulang kali menjana integer dalam julat yang ditentukan. Untuk setiap nilai yang dijana, fungsi menyemak sama ada ia telah dihantar dengan mencarinya dalam peta. Jika tidak, ia menghantar integer ke atas saluran dan merekodkannya dalam peta. Proses ini menapis nilai pendua dengan berkesan, memastikan hanya integer berbeza dihantar melalui saluran.
Menggunakan fungsi UniqueGen, kes ujian berikut boleh dilaksanakan untuk menunjukkan gelagat:
<code class="go">func TestShouldReturnDistinctValues(t *testing.T) { var c = make([]chan int) c <- UniqueGen(1, 1000) for e := range c { // only print distinct values fmt.println(e) } }</code>
Kes ujian ini akan menjana saluran 1000 integer unik dan mencetaknya ke konsol. Dengan menggunakan fungsi UniqueGen, ujian boleh memastikan bahawa ia menghasilkan nilai yang berbeza.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Saluran Integer Unik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!