Ekspresi Go slice s[lo:hi] mencipta kepingan yang mengandungi elemen daripada indeks lo kepada indeks hi-1, inklusif. Tingkah laku ini dijelaskan oleh beberapa prinsip reka bentuk:
Dalam Go, hirisan dilaksanakan sebagai penunjuk kepada tatasusunan asas. Menggunakan tatasusunan 0-indeks dan penghirisan inklusif-eksklusif membolehkan aritmetik penunjuk yang mudah. Unsur pada indeks i dalam hirisan hanyalah elemen yang ditunjuk oleh penunjuk hirisan tambah i.
Panjang hirisan Go juga merupakan kedudukan untuk menghiris ia. Ini bermakna arr[0:len(arr)] mengembalikan arr itu sendiri. Sifat ini sesuai untuk mengekstrak data daripada kepingan selepas operasi baca atau tulis.
Penghirisan eksklusif-inklusif memastikan subkepingan yang bersebelahan tatasusunan tidak bertindih. Contohnya, jika arr = [1, 2, 3, 4], maka arr[0:2] = [1, 2], arr[2:4] = [3, 4] dan arr[0:4] = arr. Sifat ini memudahkan operasi yang memerlukan pembahagian atau manipulasi sub-kepingan.
Pertimbangkan kod Go berikut:
func consecutiveSlices(ints []int) [][]int { ret := make([][]int, 0) i, j := 0, 1 for j < len(ints) { if ints[j] != ints[j-1] + 1 { ret = append(ret, ints[i:j]) i = j } } ret = append(ret, ints[i:j]) return ret }
Fungsi ini membahagikan sekeping integer kepada sub-kepingan berturut-turut berdasarkan perbezaan antara setiap elemen dan pendahulunya. Teknik penghirisan inklusif-eksklusif membolehkan pelaksanaan yang lebih mudah dan cekap berbanding menggunakan penghirisan inklusif-inklusif.
Atas ialah kandungan terperinci Mengapa Potongan `s[lo:hi]` Go Mengecualikan Elemen pada Indeks `hi`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!