Bahasa Go dialu-alukan secara meluas sebagai bahasa pengaturcaraan yang pantas, selamat dan boleh dipercayai. Antaranya, cincin golang ialah struktur data khas yang digunakan untuk mewakili senarai pautan bulat, yang boleh digunakan dalam banyak senario, biasanya digunakan dalam cache, baris gilir dan senario lain. Penggunaan khusus struktur data ini akan diperkenalkan di bawah.
Gelang bahasa Go ialah struktur data senarai terpaut bulat yang cekap yang disertakan dengan pustaka standard Go Ia wujud dalam bekas/gelang modul Secara ringkas, ia adalah struktur senarai pautan bulat, yang ditetapkan pada elemen data untuk membentuk penimbal bulat Elemen dimasukkan di kepala dan dipadamkan pada ekor Kerumitan masa adalah O(1), yang sangat sesuai untuk keperluan Pelaksanaan cache data bulat atau barisan tugas untuk membaca dan menulis yang cekap.
Dalam bahasa Go, menggunakan cincin adalah sangat mudah Pertama, anda perlu mengisytiharkan pembolehubah jenis cincin, yang ditulis seperti berikut:
var r *ring.Ring
Anda kemudian boleh menggunakan fungsi make untuk memulakan deringan kosong Selepas permulaan, anda boleh menambah elemen padanya:
r := ring.New(5) //Initialization Struktur gelang dengan 5 elemen
5 di sini mewakili panjang gelang, iaitu bilangan elemen di dalamnya.
ring ialah struktur data cincin, jadi terdapat hubungan kitaran antara elemennya. Jika anda ingin melintasi gelang, cara terbaik ialah menggunakan kaedahnya Next() dan Prev().
1) Next()
Menggunakan kaedah Next(), kita boleh melintasi gelang dalam susunan elemen:
r := ring.New(5)
untuk i := 1; i <= r.Len(); i++ {
r.Value = i r = r.Next()
}
2) Prev()
Menggunakan Prev( ) kaedah, kita Gelang boleh dilalui dalam susunan terbalik bagi elemen:
r := cincin.Baru(5)
untuk i := 1; i++ {
r.Value = i r = r.Prev()
}
1) Tambah operasi
Apabila menambah elemen pada ring, anda boleh Dua kaedah digunakan, menghubungkan dan tugasan.
1.1) Pautan
Menambah elemen pada gelang adalah operasi yang sangat mudah Kita boleh menggunakan pautan untuk memasukkan elemen ke dalam gelang:
r := cincin. .Baharu(5)
r.Nilai = 1
r.Next().Nilai = 2
r.Next().Next().Nilai = 3
r.Next() . Seterusnya().Next().Nilai = 4
r.Next().Next().Next().Next().Nilai = 5
1.2) Tugasan
Sudah tentu, anda juga boleh menggunakan tugasan untuk memasukkan elemen ke dalam gelang:
r := ring.New(5)
r.Value = 1
r = r.Next()
r.Nilai = 2
r = r.Next()
r.Nilai = 3
r = r.Next()
r.Nilai = 4
r = r ()
r.Value = 5
Kedua-dua kaedah ini mempunyai kelebihan dan keburukan tersendiri Kaedah pemautan adalah lebih intuitif, tetapi kaedah tugasan lebih mudah digunakan kumpulan.
2) Padam operasi
Sejajar dengan operasi tambah, terdapat dua cara untuk memadamkan operasi dalam gelang. Mula-mula, kita boleh mengalih keluar elemen menggunakan kaedah Remove():
r := ring.New(5)
r.Value = 1
r = r.Next()
r . Nilai = 2
r = r.Next()
r = r.Prev()
r.Nyahpaut(1) //Padamkan elemen asal gelang[1]
Gunakan kaedah Nyahpaut () boleh mengelakkan kebocoran memori yang disebabkan oleh memanggil kaedah Remove().
Kedua, kita juga boleh menggunakan kaedah Pluck() untuk memadamkan elemen:
r := ring.New(5)
r.Value = 1
r = r . Seterusnya()
r.Nilai = 2
r.Next().Nilai = 3
r.Next().Next().Nilai = 4
r.Next().Next ( ).Next().Nilai = 5
r = r.Prev()
r.Next().Next().Pluck(1) //Padam r.Next().Next() kedudukan Elemen
Kedua-dua kaedah ini mempunyai ciri tersendiri, dan penggunaan khusus perlu digabungkan dengan situasi sebenar.
Memandangkan cincin ialah struktur data cincin yang cekap, ia boleh digunakan pada banyak senario. Berikut ialah beberapa senario aplikasi praktikal:
1) Cache cincin
Dalam cache cincin, apabila kawasan penimbal penuh, data baharu akan menimpa data lama. Dalam kes ini, cincin ialah struktur data yang sangat sesuai, yang boleh mengekalkan kawasan penimbal panjang tetap. Apabila pengguna memperoleh data daripada cincin, data diambil secara berurutan melalui kaedah Next().
2) Baris gilir cincin
Dalam baris gilir cincin, apabila baris gilir penuh, elemen baharu akan menimpa elemen lama dan tidak perlu menatal baris gilir. Struktur gelang boleh dengan mudah melaksanakan struktur baris gilir ini. Apabila baris gilir kosong, nilai pulangan ring.Len() ialah 0, tetapi bukan nol.
3) Kerjasama berbilang orang
Dalam beberapa senario kerjasama berbilang orang, beberapa maklumat dengan panjang tetap perlu diedarkan secara kitaran kepada ahli yang mengambil bahagian dalam kerjasama ini boleh dicapai dengan baik menggunakan cincin Adegan seperti ini.
Menggunakan cincin, anda boleh mendapat faedah berikut:
1) Kecekapan operasi yang tinggi
Di dalam gelang Struktur dilaksanakan melalui tatasusunan, dan kaedah capaian tatasusunan adalah kitaran, jadi kecekapan operasi gelang adalah sangat tinggi.
2) Selamat dan boleh dipercayai
Memandangkan operasi di dalam gelang semuanya berdasarkan tatasusunan, proses pengendalian adalah sangat selamat dan boleh dipercayai, dan kejadian data atau masalah tidak normal tidak mudah berlaku.
3) Struktur tatasusunan
Memandangkan cincin dilaksanakan berdasarkan tatasusunan, ia boleh ditukar kepada dan dari struktur tatasusunan lain tanpa memerlukan operasi yang menyusahkan seperti pemindahan data. Kelemahan
gelang termasuk:
1) Benang tidak selamat
Memandangkan struktur gelang hanyalah senarai terpaut yang disambungkan, tiada perlindungan kunci. Oleh itu, apabila melakukan operasi serentak, anda perlu melindungi keselamatan benang anda sendiri.
2) Terdapat masalah penggunaan memori
Memandangkan cincin dilaksanakan berdasarkan tatasusunan, ia memerlukan ruang tambahan untuk menyimpan maklumat senarai terpaut, yang mungkin mempunyai kesan tertentu pada penggunaan memori.
Ring ialah struktur data yang sangat cekap yang boleh digunakan secara meluas dalam senario seperti pembacaan dan penulisan berurutan penampan cincin dan baris gilir tugas. Melalui cincin, kami boleh melaksanakan senario ini dengan lebih mudah tanpa perlu risau tentang isu struktur data. Pada masa yang sama, kita perlu memberi perhatian kepada kekurangan cincin untuk memastikan ia boleh menjadi benang-selamat dan mengelakkan penggunaan memori yang berlebihan semasa digunakan.
Atas ialah kandungan terperinci penggunaan cincin golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!