Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Adakah Pergi Melemparkan Ralat "jenis *T ialah penunjuk kepada parameter jenis, bukan parameter jenis" Apabila Menggunakan Generik?

Mengapa Adakah Pergi Melemparkan Ralat "jenis *T ialah penunjuk kepada parameter jenis, bukan parameter jenis" Apabila Menggunakan Generik?

Susan Sarandon
Susan Sarandonasal
2024-11-04 16:46:02170semak imbas

Why Does Go Throw the Error

Pergi dengan Generik: Memahami Parameter Jenis dan Kekangan

Artikel ini menyelidiki selok-belok mengapa ralat pengkompil "jenis *T ialah penunjuk kepada parameter jenis, bukan jenis parameter" berlaku apabila cuba menyusun kod yang melibatkan generik dalam Go.

Perihal Jenis Parameter dan Kekangan

Dalam Go generik, parameter jenis mewakili ruang letak untuk sebarang jenis yang memenuhi kekangan yang ditentukan. Terutamanya, kekangan mentakrifkan set operasi yang tersedia pada parameter jenis, tetapi ia tidak mentakrifkan secara langsung sifat mana-mana jenis penunjuk yang diperoleh daripada parameter jenis itu. Ini adalah inti kepada mesej ralat yang dihadapi.

Mesej Ralat Dijelaskan

Mesej ralat menandakan bahawa set kaedah *T tidak secara automatik termasuk kaedah penerima penunjuk yang diisytiharkan pada jenis konkrit sedang terkekang. Ini bermakna jika antara muka kekangan memerlukan kaedah penerima penunjuk, jenis konkrit mesti melaksanakannya dengan penerima penunjuk.

Menyelesaikan Isu

Dalam coretan kod yang disediakan:

  1. Kekangan: Untuk menangani ralat "Kaedah SetId mempunyai penerima penunjuk", antara muka GS hendaklah ditakrifkan dengan penerima penunjuk:
<code class="go">type GS interface {
    Id() string
    (*GS) SetId(string)
}</code>
  1. Instansiasi: Instantiasi MyStore harus menggunakan *A dan bukannya A:
<code class="go">var storeA = &MyStore[*A]{}</code>
  1. Pengubahsuaian Kaedah: Tukar takrif kaedah dalam MyStore kepada gunakan T dan bukannya *T:
<code class="go">type MyStore[T GS] struct {
    values map[string]T
}

func (s *MyStore[T]) add(item T) {...}</code>

Dengan membuat pelarasan ini, kod menjadi betul dari segi sintaksis dan semantik.

Atas ialah kandungan terperinci Mengapa Adakah Pergi Melemparkan Ralat "jenis *T ialah penunjuk kepada parameter jenis, bukan parameter jenis" Apabila Menggunakan Generik?. 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