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.
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 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.
Dalam coretan kod yang disediakan:
<code class="go">type GS interface { Id() string (*GS) SetId(string) }</code>
<code class="go">var storeA = &MyStore[*A]{}</code>
<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!