Saluran Go direka bentuk untuk beroperasi sebagai baris gilir pertama masuk dahulu (FIFO), tetapi situasi tertentu mungkin memanggil untuk tingkah laku tindanan masuk dahulu keluar (LIFO). Artikel ini meneroka kemungkinan mengubah suai saluran untuk berfungsi sebagai tindanan.
Menukar Gelagat FIFO
Saluran Go sememangnya beroperasi mengikut prinsip FIFO, yang bermaksud elemen pertama yang dimasukkan adalah yang pertama diambil. Tiada cara terbina dalam untuk mengubah tingkah laku lalai ini. Percubaan untuk membalikkan susunan menggunakan julat terbalik atau kaedah lain tidak akan menghasilkan hasil LIFO yang diingini.
Penyelesaian Alternatif: Menggunakan Timbunan
Daripada mengubah suai saluran, pertimbangkan menggunakan pakej "bekas/timbunan", perpustakaan Go standard yang mengandungi struktur data timbunan. Heap ialah struktur data berasaskan pokok yang mengekalkan susunan LIFO, meniru tindanan dengan berkesan.
Untuk menggunakan pakej timbunan, nyatakan jenis Timbunan baharu:
<code class="go">import "container/heap" type myHeap []int func (h myHeap) Len() int { return len(h) } func (h myHeap) Less(i, j int) bool { return h[i] > h[j] } // Reverse order for LIFO func (h *myHeap) Swap(i, j int) { (*h)[i], (*h)[j] = (*h)[j], (*h)[i] } func (h *myHeap) Push(x interface{}) { *h = append(*h, x) } func (h *myHeap) Pop() interface{} { old := *h; n := len(old); x := old[n-1]; *h = old[0 : n-1]; return x }</code>
Di sini, kami ada melanjutkan jenis timbunan dan menyediakan pelaksanaan tersuai untuk kaedah seperti "Kurang", yang mentakrifkan tertib LIFO dan "Tekan" dan "Pop", operasi asas timbunan.
Dengan bergantung pada data timbunan struktur, anda boleh mencapai gelagat LIFO dan melakukan operasi gaya DFS tanpa mengubah suai kefungsian saluran asli Go.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Melaksanakan Timbunan Gelagat Menggunakan Saluran Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!