Analisis mendalam tentang cara penghirisan bahasa Go berfungsi

王林
Lepaskan: 2024-03-27 19:45:03
asal
1118 orang telah melayarinya

Analisis mendalam tentang cara penghirisan bahasa Go berfungsi

Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go secara semula jadi telah menarik minat ramai pembangun. Antaranya, slice ialah salah satu struktur data yang paling biasa digunakan dalam bahasa Go. Ia adalah fleksibel dan cekap dan digunakan secara meluas untuk menyimpan pengumpulan data panjang dinamik. Artikel ini akan memberikan analisis mendalam tentang cara penghirisan bahasa Go berfungsi dan menerangkannya melalui contoh kod tertentu.

1. Definisi dan pengisytiharan kepingan

Dalam bahasa Go, hirisan ialah struktur data yang ringan, terdiri daripada tiga bahagian: penunjuk ke tatasusunan yang mendasari, panjang hirisan dan kapasiti hirisan. Bentuk pengisytiharan hirisan ialah:

var slice []int
Salin selepas log masuk

Atau gunakan fungsi make untuk mencipta hirisan:

slice := make([]int, 0, 5)
Salin selepas log masuk

Antaranya, parameter pertama fungsi make ialah jenis hirisan, parameter kedua ialah panjang hirisan , dan parameter ketiga ialah kapasiti kepingan .

2 Tatasusunan dasar hirisan

Tatasusunan dasar hirisan ialah ruang storan data sebenar yang dirujuk oleh hirisan apabila hirisan dibuat, ruang memori berterusan akan diperuntukkan secara automatik untuk menyimpan data. Apabila hirisan melakukan operasi tambah, jika data baharu melebihi kapasiti hirisan, sistem akan secara automatik memperuntukkan tatasusunan asas yang lebih besar dan menyalin data asal ke tatasusunan asas baharu.

slice1 := make([]int, 3, 5)
slice2 := append(slice1, 4)
Salin selepas log masuk

Dalam kod di atas, tatasusunan asas slice1 mempunyai panjang 5 dan kapasiti 5. Apabila operasi tambah dijalankan, sistem akan memperuntukkan semula tatasusunan pendasar secara automatik dan menyalin data asal ke tatasusunan pendasar baharu. Tatasusunan asas yang dirujuk oleh slice2 mempunyai panjang 6 dan kapasiti 10.

3. Cara penghirisan berfungsi

Prinsip kerja penghirisan boleh dijelaskan dengan contoh kod berikut:

package main

import "fmt"

func main() {
    array := [5]int{1, 2, 3, 4, 5}
    slice := array[1:3] // 切片包含array[1]和array[2]

    fmt.Printf("数组array:%v
", array)
    fmt.Printf("切片slice:%v
", slice)
    fmt.Printf("切片长度:%d
", len(slice))
    fmt.Printf("切片容量:%d
", cap(slice))
}
Salin selepas log masuk

Keputusan yang dijalankan adalah seperti berikut:

数组array:[1 2 3 4 5]
切片slice:[2 3]
切片长度:2
切片容量:4
Salin selepas log masuk

Seperti yang dapat dilihat daripada keputusan, hirisan mengandungi tatasusunan indeks 1 dan Unsur 2 mempunyai panjang 2 dan kapasiti 4. Panjang hirisan mewakili bilangan elemen yang sebenarnya disimpan dalam hirisan, dan kapasiti mewakili bilangan elemen dalam hirisan dari kedudukan semasa ke penghujung tatasusunan yang mendasari.

4. Ciri-ciri kepingan

Kepingan ialah jenis rujukan, dan operasi pada kepingan akan menjejaskan tatasusunan asas dan kepingan lain. Apabila berbilang keping bersama-sama merujuk tatasusunan pendasar, jika unsur-unsur satu keping berubah, kepingan lain yang berkongsi tatasusunan pendasar juga akan terjejas.

package main

import "fmt"

func main() {
    array := [3]int{1, 2, 3}
    slice1 := array[:] // slice1引用整个数组
    slice2 := array[1:] // slice2引用数组从索引1开始的子数组

    slice1[0] = 100
    fmt.Println(array) // [100 2 3]
    fmt.Println(slice2) // [2 3]
}
Salin selepas log masuk

Dalam kod di atas, mengubah suai elemen pertama slice1 hingga 100 akan menyebabkan elemen pertama tatasusunan asas turut diubah suai. Oleh kerana slice2 berkongsi tatasusunan asas, slice2 juga terjejas.

5. Mekanisme pengembangan hirisan

Apabila kapasiti hirisan tidak mencukupi untuk menyimpan data baharu, sistem secara automatik akan memperuntukkan kapasiti yang lebih besar kepada hirisan. Dalam keadaan biasa, kapasiti baharu adalah dua kali ganda kapasiti asal, tetapi jika kapasiti asal kurang daripada 1024, kapasiti baharu ialah 1.25 kali kapasiti asal.

slice := make([]int, 3, 5)
fmt.Printf("切片长度:%d
", len(slice)) // 切片长度:3
fmt.Printf("切片容量:%d
", cap(slice)) // 切片容量:5

slice = append(slice, 4)
fmt.Printf("切片长度:%d
", len(slice)) // 切片长度:4
fmt.Printf("切片容量:%d
", cap(slice)) // 切片容量:5
Salin selepas log masuk

Dalam kod di atas, panjang kepingan ialah 3 dan kapasiti ialah 5. Apabila operasi tambah dilakukan, kerana kapasiti mencukupi, kepingan tidak akan mengagihkan semula tatasusunan asas, panjangnya meningkat kepada 4, dan kapasiti kekal 5.

6. Ringkasan

Melalui contoh dan analisis kod di atas, kami mempunyai pemahaman yang mendalam tentang cara penghirisan bahasa Go berfungsi. Sebagai struktur data yang fleksibel dan cekap, penghirisan memainkan peranan penting dalam pembangunan bahasa Go. Pembangun harus biasa dengan ciri dan prinsip kerja penghirisan untuk menggunakan penghirisan dengan lebih baik untuk meningkatkan kecekapan kod.

Saya harap artikel ini dapat membantu pembaca memahami dengan lebih mendalam tentang penghirisan bahasa Go. Pembaca juga dialu-alukan untuk mendalami lagi pemahaman dan aplikasi penghirisan melalui latihan dan penerokaan.

Atas ialah kandungan terperinci Analisis mendalam tentang cara penghirisan bahasa Go berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!