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
Lepaskan: 2024-12-21 02:35:10
asal
236 orang telah melayarinya

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]
}
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan