Rumah > Artikel > pembangunan bahagian belakang > Pelaksanaan asas kepingan Golang
Golang ialah bahasa pembangunan yang cekap Apabila memproses sejumlah besar data, menggunakan kepingan adalah cara yang sangat biasa. Menghiris digunakan secara meluas di Golang, dan prinsip pelaksanaan asas sering ditanya dalam temu bual. Artikel ini akan menyelidiki pelaksanaan asas penghirisan Golang.
Dalam Golang, hirisan ialah struktur data tatasusunan dinamik. Ia adalah penunjuk kepada tatasusunan asas dan merekodkan panjang dan kapasiti kepingan. Kita boleh menggunakan fungsi make() untuk membuat kepingan.
Contohnya:
a := make([]int, 5) //长度为5,容量为5 b := make([]int, 5, 10) //长度为5,容量为10
di mana a ialah kepingan dengan panjang dan kapasiti yang sama, dan b ialah kepingan dengan panjang 5 dan kapasiti 10.
Struktur dasar hirisan mengandungi tiga sifat: penunjuk, panjang dan kapasiti.
type slice struct { ptr uintptr //指针 len int //长度 cap int //容量 }
Antaranya, penuding menghala ke elemen pertama tatasusunan pendasar, panjang mewakili bilangan elemen dalam hirisan, dan kapasiti mewakili bilangan elemen yang boleh disimpan dalam tatasusunan pendasar.
Peluasan kepingan ialah proses dinamik. Apabila panjang hirisan melebihi kapasitinya, Golang akan mengagihkan semula memori yang lebih besar dan menyalin data asal ke ruang memori baharu.
Sebagai contoh, apabila elemen baharu ditambahkan pada kepingan dengan panjang 10 dan kapasiti 10, kapasitinya akan dikembangkan kepada 20, dan semua elemen asal juga akan disalin ke bahagian bawah 20 elemen baharu dalam tatasusunan.
Peluasan penghirisan adalah operasi yang agak memakan masa, jadi apabila menggunakan penghirisan, kami cuba menganggarkan bilangan elemen yang perlu disimpan.
Apabila dua hirisan berkongsi tatasusunan dasar yang sama, operasi di antara keduanya akan mempengaruhi satu sama lain.
Contohnya:
a := []int{1, 2, 3, 4, 5, 6} b := a[1:4] //切片 b[0] = 100 fmt.Println(a) //[1 100 3 4 5 6] fmt.Println(b) //[100 3 4]
Dalam kod di atas, slice b berkongsi tatasusunan asas a, jadi apabila kita mengubah suai elemen dalam b, elemen yang sepadan dalam a juga akan diubah suai.
Slice itu sendiri ialah penunjuk kepada array underlying, jadi kita boleh menggunakan pointer kepada slice untuk mengendalikan slice.
Contohnya:
a := []int{1, 2, 3, 4, 5} b := &a fmt.Println(*b) //[1 2 3 4 5] (*b)[0] = 100 fmt.Println(a) //[100 2 3 4 5]
Dalam kod di atas, b ialah penunjuk kepada kepingan, kita boleh mendapatkan nilai elemen a hingga b. Pada masa yang sama, elemen dalam a boleh diubah suai melalui b.
Anda perlu memberi perhatian kepada perkara berikut apabila menggunakan kepingan:
(1) Apabila kepingan diluluskan sebagai fungsi parameter, Perubahan pada kepingan di dalam fungsi akan menjejaskan kepingan di luar fungsi.
(2) Apabila hirisan berkongsi tatasusunan pendasar, mengubah suai nilai elemen dalam hirisan akan menjejaskan kepingan lain yang berkongsi tatasusunan pendasar.
(3) Apabila panjang dan kapasiti hirisan adalah sama, memori yang lebih besar akan diagihkan semula apabila hirisan dibesarkan. Oleh itu, apabila menggunakan penghirisan, cuba rancang berdasarkan anggaran bilangan elemen untuk mengelakkan operasi pengembangan yang berlebihan.
Dalam artikel ini, kami mempunyai perbincangan mendalam tentang prinsip pelaksanaan asas penghirisan Golang, termasuk definisi, struktur asas dan mekanisme pengembangan penghirisan . Pada masa yang sama, kami juga memperkenalkan penunjuk hirisan, tatasusunan asas yang dikongsi dan langkah berjaga-jaga penggunaan. Memahami prinsip pelaksanaan asas penghirisan Golang adalah sangat penting untuk pemahaman mendalam tentang mekanisme dalaman dan prinsip pelaksanaan bahasa Golang. Apabila menggunakan penghirisan, anda mesti mengingati prinsip pelaksanaan asas penghirisan untuk mengelakkan potensi masalah dan ralat prestasi.
Atas ialah kandungan terperinci Pelaksanaan asas kepingan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!