Rumah > pembangunan bahagian belakang > Golang > Mengapa Menghiris `b[1:]` Menyebabkan Ralat Luar Had dalam Go?

Mengapa Menghiris `b[1:]` Menyebabkan Ralat Luar Had dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-05 03:43:14
asal
761 orang telah melayarinya

Why Does Slicing `b[1:]` Cause an Out-of-Bounds Error in Go?

Slicing: Out of Bounds Error in Go

Apabila melaksanakan kod berikut:

package main

import "fmt"

func main() {
    a := make([]int, 5)
    printSlice("a", a)
    b := make([]int, 0, 5)
    printSlice("b", b)
    c := b[1:]
    printSlice("c", c)
}


func printSlice(s string, x []int) {
    fmt.Printf("%s len=%d cap=%d %v\n",
        s, len(x), cap(x), x)
}
Salin selepas log masuk

anda menghadapi ralat "luar sempadan". Ralat ini berlaku kerana ungkapan penghirisan yang tidak sah semasa membuat kepingan c.

Dalam Go, menghiris tatasusunan atau kepingan mengikut peraturan ini:

  • Indeks berada dalam julat jika 0 < = rendah <= tinggi <= len(a) untuk tatasusunan atau rentetan.
  • Untuk hirisan, indeks atas terikat lalai kepada kapasiti hirisan (cap(a)) dan bukannya panjangnya.

Ungkapan penghirisan b[1:] cuba mencipta kepingan c baharu dengan sempadan bawah 1. Walau bagaimanapun, sempadan yang lebih tinggi tiada dan lalai kepada panjang b, iaitu 0. Ini menghasilkan kepingan dengan sempadan bawah lebih besar daripada sempadan atasnya, yang membawa kepada "di luar sempadan" ralat.

Untuk membetulkan ralat ini, anda mesti memastikan bahawa sempadan lebih tinggi bagi ungkapan penghirisan adalah lebih besar daripada atau sama dengan sempadan bawah. Sebagai contoh, anda boleh menggunakan ungkapan berikut untuk mencipta kepingan c yang sah:

c := b[1:2]
Salin selepas log masuk

Ini menghasilkan kepingan c dengan sempadan bawah 1 dan sempadan atas 2, yang sah sejak 1 < = 2 <= cap(b) (kapasiti b ialah 5).

Atas ialah kandungan terperinci Mengapa Menghiris `b[1:]` Menyebabkan Ralat Luar Had dalam Go?. 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