Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Mengulangi Penunjuk Slice dengan Betul dalam Go?

Bagaimanakah Saya Mengulangi Penunjuk Slice dengan Betul dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 07:41:13637semak imbas

How Do I Correctly Iterate Over a Slice Pointer in Go?

Ralat Pengendalian untuk Penunjuk Slice di Golang

Isu ini berpunca daripada ketidakupayaan untuk berjulat dari penuding ke hirisan. Ralat akan dilemparkan apabila cuba melelar ke atas penuding hirisan, seperti dalam coretan kod yang disediakan:

func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) {
    for i := range classes {  // This line causes the error
        class := classes[i]
        // ...
    }
}

Penyelesaian: Nyahrujuk Penunjuk

Golang tidak bukan secara automatik menyahrujuk penunjuk keratan, yang bermaksud anda mesti menyahrujuk penuding secara manual untuk mengakses keratan sebenar. Untuk membetulkan ralat, nyahrujuk penuding dalam pernyataan julat:

func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) {
    for i := range *classes {  // Dereference the pointer here
        class := (*classes)[i]
        // ...
    }
}

Memahami Penunjuk Slice

Penunjuk Slice dalam Golang berguna apabila anda perlu menghantar kepingan ke berfungsi tanpa menyalin tatasusunan asas. Pengoptimuman ini mengelakkan peruntukan memori dan overhed yang tidak perlu.

Walau bagaimanapun, adalah penting untuk diingat bahawa penunjuk hirisan pada asasnya menunjuk kepada hirisan, bukan tatasusunan. Oleh itu, tidak perlu menggunakan penuding kepada penuding kepada hirisan.

Rujukan

  • [Effective Go: Pointers and Slices](https: //go.dev/doc/effective_go#pointers_slices)

Atas ialah kandungan terperinci Bagaimanakah Saya Mengulangi Penunjuk Slice dengan Betul dalam Go?. 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