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
Barbara Streisandasal
2024-10-29 17:26:02371semak imbas

 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)

Dalam kod contoh anda:

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

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)
}

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!

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