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

Susan Sarandon
Lepaskan: 2024-11-04 16:46:02
asal
176 orang telah melayarinya

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>
Salin selepas log masuk
  1. Instansiasi: Instantiasi MyStore harus menggunakan *A dan bukannya A:
<code class="go">var storeA = &MyStore[*A]{}</code>
Salin selepas log masuk
  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>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!