Rumah  >  Artikel  >  pembangunan bahagian belakang  >  penggunaan cincin golang

penggunaan cincin golang

PHPz
PHPzasal
2023-05-16 13:54:38532semak imbas

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.

  1. Konsep cincin

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.

  1. Pengisytiharan dan permulaan cincin

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.

  1. Ring traversal

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 dan padam operasi dalam gelang

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.

  1. Aplikasi cincin

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.

  1. Kelebihan dan kekurangan cincin

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.

  1. Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:simpulan bahasa golangArtikel seterusnya:simpulan bahasa golang