Rumah >pembangunan bahagian belakang >Golang >Pengenalan yang mendalam tentang penggunaan menghiris golang

Pengenalan yang mendalam tentang penggunaan menghiris golang

PHPz
PHPzasal
2023-04-05 10:29:491336semak imbas

[Pengenalan]

Bahasa Go ialah bahasa pengaturcaraan keluarga C Ia mempunyai ciri kecekapan, kesederhanaan, keselamatan, dsb., dan ia juga mempunyai beberapa ciri bahasa pengaturcaraan moden. Dalam bahasa Go, slice ialah jenis data yang sangat penting dan digunakan secara meluas dalam banyak situasi. Dalam artikel ini, kami akan memperkenalkan penggunaan hirisan dalam golang secara mendalam untuk membantu semua orang lebih memahami penggunaan hirisan dalam golang.

【1. Definisi asas menghiris】

Pertama, mari kita lihat definisi asas menghiris dalam golang. Dalam bahasa Go, slice ialah struktur yang mengandungi tiga medan: penunjuk kepada elemen tatasusunan, panjang dan kapasiti. Apabila mencipta kepingan, kita perlu menggunakan fungsi make() terbina dalam, yang mempunyai format berikut:

func make([]T, len, cap) []T

di mana T mewakili jenis elemen kepingan, len mewakili panjang kepingan , dan topi mewakili kapasiti kepingan. Apabila menggunakan fungsi make(), jika kapasiti tidak dinyatakan, kapasiti adalah sama dengan panjang.

Secara khusus, kita boleh membuat kepingan melalui kod berikut:

a := make([]int, 5) //创建一个长度为5的int类型切片
b := make([]int, 3, 5) //创建一个长度为3,容量为5的int类型切片

Seperti yang anda lihat, fungsi make() akan mengembalikan kepingan baharu, yang boleh kami tetapkan untuk Beroperasi pada pembolehubah.

【2. Operasi asas penghirisan】

Selepas mentakrifkan kepingan, kita boleh melakukan beberapa operasi asas pada kepingan. Di bawah, kami akan memperkenalkan secara terperinci operasi biasa menghiris dalam golang.

[2.1 Slice access and traversal]

Pertama sekali, kita boleh mengakses elemen dalam slice melalui pengindeksan. Seperti tatasusunan, indeks hirisan dalam golang juga bermula dari 0. Contohnya:

a := []int{1, 2, 3}
fmt.Println(a[0]) //输出1
fmt.Println(a[1]) //输出2
fmt.Println(a[2]) //输出3

Pada masa yang sama, kita juga boleh menggunakan gelung for untuk melintasi semua elemen dalam kepingan. Sebagai contoh:

a := []int{1, 2, 3}
for i:=0;i<len(a);i++ {
    fmt.Println(a[i])
}

Selain itu, golang juga menyediakan kata kunci julat, yang boleh kita gunakan untuk melintasi semua elemen dalam kepingan. Contohnya:

a := []int{1, 2, 3}
for i, v := range a {
    fmt.Println(i, v)
}

Dalam kod di atas, i mewakili indeks elemen, dan v mewakili nilai elemen.

[2.2 Operasi tambah kepingan]

Dalam golang, kita boleh menggunakan fungsi append() untuk menambahkan elemen baharu pada kepingan. Fungsi ini mempunyai format berikut:

func append(s []T, vs ...T) []T

di mana s mewakili hirisan yang hendak dilampirkan, dan vs mewakili elemen yang akan ditambahkan. Dalam fungsi append(), kita boleh lulus satu atau lebih parameter dan menambahnya pada penghujung kepingan. Contohnya:

a := []int{1, 2, 3}
a = append(a, 4, 5, 6)
fmt.Println(a) //输出[1 2 3 4 5 6]

Perlu diambil perhatian bahawa menggunakan fungsi append() akan mencipta kepingan baharu. Jika kepingan baharu perlu diberikan kepada pembolehubah, maka kita perlu menetapkan semula pembolehubah, jika tidak kepingan asal tidak akan diubah.

[2.3 Slice copy operation]

Dalam golang, kita boleh menggunakan fungsi copy() untuk menyalin kepingan. Fungsi ini mempunyai format berikut:

func copy(dst, src []T) int

di mana dst mewakili kepingan sasaran dan src mewakili kepingan sumber. Apabila memanggil fungsi copy(), jika panjang kepingan sasaran lebih kecil daripada kepingan sumber, hanya elemen panjang kepingan sasaran akan disalin. Contohnya:

a := []int{1, 2, 3}
b := make([]int, 2)
copy(b, a)
fmt.Println(b) //输出[1 2]

Perlu diambil perhatian bahawa menggunakan fungsi copy() juga akan mencipta kepingan baharu.

【3. Pengembangan hirisan】

Apabila menambahkan elemen pada kepingan, jika hirisan tidak lagi mempunyai ruang yang mencukupi, golang akan mengembangkan kepingan secara automatik. Apabila mengembangkan, golang akan menggandakan kapasiti hirisan dan mencipta tatasusunan asas baharu. Pada masa yang sama, golang juga akan menyalin elemen dalam kepingan asal ke tatasusunan asas baharu.

Perlu diambil perhatian bahawa semasa pengembangan, jika panjang tatasusunan pendasar baharu terlalu panjang, golang akan memilih panjang tatasusunan pendasar baharu berdasarkan bilangan elemen dalam kepingan semasa. Secara khusus, golang akan membuat pilihan berdasarkan peraturan berikut:

  • Jika bilangan elemen dalam hirisan kurang daripada 1024, panjang tatasusunan pendasar baharu adalah sama dengan dua kali panjang asal; >
  • Jika Jika bilangan elemen dalam hirisan lebih besar daripada atau sama dengan 1024, panjang tatasusunan pendasar baharu adalah sama dengan 1.25 kali ganda asal.
Setelah memahami mekanisme pengembangan hirisan dalam golang, kami boleh menggunakan hirisan dengan lebih baik dan meningkatkan kecekapan program.

【4. Pengurusan memori kepingan】

Apabila menggunakan kepingan, kita perlu memberi perhatian kepada isu pengurusan ingatan. Dalam golang, hirisan asas sepadan dengan tatasusunan Apabila hirisan ditugaskan kepada pembolehubah lain, tatasusunan asasnya juga akan disalin. Sebagai contoh:

a := []int{1, 2, 3}
b := a //将a赋值给b
b[0] = 4 //改变b中的第一个元素
fmt.Println(a) //输出[1 2 3]
fmt.Println(b) //输出[4 2 3]
Perlu diingatkan bahawa jika hirisan diluluskan sebagai parameter kepada fungsi, memandangkan lapisan dasar hirisan sepadan dengan tatasusunan, mengubah suai elemen kepingan dalam fungsi juga akan menjejaskan kepingan asal. Contohnya:

func changeSlice(a []int) {
    a[0] = 4 //修改a中的第一个元素
}

b := []int{1, 2, 3}
changeSlice(b)
fmt.Println(b) //输出[4 2 3]
Setelah memahami isu pengurusan memori penghirisan dan tatasusunan pendasar, kami boleh menggunakan penghirisan dengan lebih baik, meningkatkan kecekapan program dan mengelakkan kesan yang tidak dijangka pada tatasusunan asas.

[Kesimpulan]

Slice ialah jenis data yang sangat penting dalam golang dan digunakan secara meluas dalam banyak situasi. Dalam artikel ini, kami memperkenalkan secara terperinci definisi asas, operasi, pengembangan dan pengurusan memori hirisan dalam golang. Saya harap artikel ini dapat membantu anda lebih memahami penggunaan hirisan dalam golang, supaya lebih baik menggunakan hirisan untuk membangunkan atur cara yang cekap.

Atas ialah kandungan terperinci Pengenalan yang mendalam tentang penggunaan menghiris 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