Rumah > pembangunan bahagian belakang > Golang > Mengapa Pergi Melemparkan Ralat Masa Jalan Apabila Panjang Slice Melebihi Kapasitinya?

Mengapa Pergi Melemparkan Ralat Masa Jalan Apabila Panjang Slice Melebihi Kapasitinya?

Barbara Streisand
Lepaskan: 2024-10-29 17:26:02
asal
395 orang telah melayarinya

 Why Does Go Throw a Runtime Error When a Slice's Length Exceeds its Capacity?

Memahami Slices: Kapasiti vs. Panjang

Apabila berurusan dengan kepingan dalam Go, adalah penting untuk memahami hubungan antara kapasiti dan panjang. Kapasiti merujuk kepada saiz tatasusunan yang mendasari tempat hirisan beroperasi, manakala panjang menentukan bilangan elemen yang sedang disertakan dalam hirisan.

Ralat Masa Jalan: Panjang Potongan Melebihi Kapasiti

Ralat "ralat masa jalan: makeslice: had out of range" berlaku apabila cuba membuat kepingan dengan kapasiti kurang daripada panjangnya. Ralat ini timbul kerana kepingan mengikut reka bentuk mengekalkan invarian yang panjangnya tidak boleh melebihi kapasiti:

0 ≤ len(s) ≤ cap(s)
Salin selepas log masuk

Dalam kod contoh anda:

type b []int
var k = make([]b, 10, 5)
fmt.Println(k[8])
Salin selepas log masuk

Anda telah menentukan jenis hirisan k []b, dengan b ialah jenis kepingan lain. Walau bagaimanapun, anda telah cuba mencipta kepingan ini dengan kapasiti 5, yang tidak mencukupi untuk menampung panjang 10. Oleh itu, ralat masa jalanが発生します。

Mengapa Bukan Masa Penyusun Ralat?

Dalam kes tertentu, seperti kes anda di mana nilai kapasiti dan panjang adalah statik, pengkompil berkemungkinan mengesan ralat pada masa penyusunan. Walau bagaimanapun, ini tidak selalu dapat dilaksanakan. Pertimbangkan kod berikut:

package main

import (
    "fmt"
    "rand"
)

func main() {
    k := make([]int, rand.Int(), rand.Int())
    fmt.Println(k)
}
Salin selepas log masuk

Di sini, nilai kapasiti dan panjang ditentukan secara dinamik pada masa jalan menggunakan pakej rand. Oleh itu, pengkompil tidak dapat mengesahkan secara statik bahawa kapasiti akan sentiasa melebihi panjang dan, oleh itu, mesti mewakilkan semakan ini kepada masa jalan.

Atas ialah kandungan terperinci Mengapa Pergi Melemparkan Ralat Masa Jalan Apabila Panjang Slice Melebihi Kapasitinya?. 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