Rumah >pembangunan bahagian belakang >Golang >Mengapa Go Slices `c` dan `d` Mempunyai Nilai dan Kapasiti Berbeza Selepas Menghiris?

Mengapa Go Slices `c` dan `d` Mempunyai Nilai dan Kapasiti Berbeza Selepas Menghiris?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 02:35:10318semak imbas

Why Do Go Slices `c` and `d` Have Different Values and Capacities After Slicing?

Memahami Kapasiti Slice dan Panjangnya dalam Go

Apabila belajar Go daripada tutorialnya, seseorang mungkin menghadapi soalan seperti:

Soalan:

Dalam kod di bawah, mengapa kepingan c dan d dimulakan dengan nilai dan kapasiti yang berbeza?

func main() {
  a := make([]int, 5)
  b := make([]int, 0, 5)
  c := b[:2]
  d := c[2:5]
}

Jawapan:

Dalam Go, kepingan disokong oleh tatasusunan. Apabila hirisan dibuat dengan make, tatasusunan sandaran dimulakan dengan nilai sifarnya. Dalam kes ini, ia ialah tatasusunan integer, setiap satu dimulakan kepada 0.

Apabila c dicipta sebagai kepingan b, ia berkongsi tatasusunan sandaran yang sama seperti b. Memandangkan b dicipta dengan tatasusunan sifar panjang, dua elemen pertama tatasusunan sandaran ialah 0. Oleh itu, c mempunyai panjang 2 dan elemennya kedua-duanya 0.

d dicipta sebagai kepingan c bermula pada indeks 2. Ia juga berkongsi tatasusunan sokongan yang sama seperti c. Walau bagaimanapun, kapasitinya berbeza kerana ia adalah ungkapan hirisan penuh. Ungkapan hirisan penuh mempunyai kapasiti yang sama dengan perbezaan antara indeks pertama dan terakhirnya, yang dalam kes ini ialah 5 - 2 = 3.

Sumber Tambahan:

  • [Go Slices: Penggunaan dan Dalaman](https://blog.golang.org/slices)
  • [Array, Slices (dan Rentetan): Mekanik 'tambah'](https://blog.golang.org/slices- melampirkan)

Atas ialah kandungan terperinci Mengapa Go Slices `c` dan `d` Mempunyai Nilai dan Kapasiti Berbeza Selepas Menghiris?. 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