Rumah >pembangunan bahagian belakang >Golang >Go Slices: Mengapa Slices c dan d Mempunyai Panjang dan Kapasiti Masing-masing?

Go Slices: Mengapa Slices c dan d Mempunyai Panjang dan Kapasiti Masing-masing?

Patricia Arquette
Patricia Arquetteasal
2024-12-28 20:23:13719semak imbas

Go Slices: Why Do Slices c and d Have Their Respective Lengths and Capacities?

Go Slices: Memahami Kapasiti dan Panjang

Apabila bekerja dengan slice dalam Go, adalah penting untuk memahami konsep kapasiti dan panjang. Sifat ini memainkan peranan penting dalam operasi hirisan dan mempengaruhi gelagat hirisan apabila dihiris atau ditambah.

Pertimbangkan contoh kod berikut:

func main() {
  a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5

  b := make([]int, 0, 5) // [] len=0 cap=5

  c := b[:2]   // [0,0] len=2 cap=5

  d := c[2:5]  // [0,0,0] len=3 cap=3
}

Kod ini menimbulkan pelbagai persoalan mengenai panjang dan kapasiti hirisan c dan d:

  • Mengapa c mempunyai panjang 2 dan mengandungi [0,0]?

    Walaupun b pada mulanya kosong ([], length=0), adalah penting untuk ambil perhatian bahawa tatasusunan dan hirisan Go sentiasa dimulakan dengan nilai sifarnya. Dalam kes integer, nilai sifar ialah 0. Oleh itu, apabila anda menghiris b dengan [:2], anda mencipta kepingan baharu yang mewarisi nilai sifar b.

  • Mengapa d mempunyai kapasiti 3?

    Apabila anda menghiris kepingan dalam Go, ia menggunakan semula tatasusunan asas yang sama. Dalam kes ini, d berkongsi tatasusunan sandaran yang sama seperti c. Kapasiti d dikira sebagai akhir-mula, di mana permulaan dan akhir ialah indeks permulaan dan akhir bagi ungkapan hirisan ([2:5]), masing-masing. Oleh itu, kapasiti d ialah 5 (akhir) - 2 (mula) = 3.

Atas ialah kandungan terperinci Go Slices: Mengapa Slices c dan d Mempunyai Panjang dan Kapasiti Masing-masing?. 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