Rumah >pembangunan bahagian belakang >Golang >Mengapa Kaedah Antara Muka Generik Tidak Boleh Mempunyai Parameter Jenis?

Mengapa Kaedah Antara Muka Generik Tidak Boleh Mempunyai Parameter Jenis?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 09:52:11416semak imbas

Why Can't Go Generics Interface Methods Have Type Parameters?

Parameterisasi Kaedah Antara Muka dalam Go Generik

Semasa meneroka Go generik dalam versi 1.18beta2, pembangun mungkin menghadapi ralat "kaedah antara muka mesti tiada jenis parameter" apabila cuba menentukan antara muka dengan kaedah menerima parameter jenis. Ralat ini berpunca daripada keputusan reka bentuk untuk melarang parameter jenis dalam definisi kaedah antara muka.

Sebab di sebalik sekatan ini terletak pada potensi kekaburan dan implikasi prestasi. Parameter jenis dalam kaedah antara muka boleh membawa kepada ketidakpastian tentang sama ada identiti hujah dikekalkan, keperluan untuk traversal pokok masa kompilasi yang menyeluruh atau potensi untuk refleksi memberi kesan prestasi pada masa jalan.

Selain itu, kaedah berparameter tidak boleh secara langsung melaksanakan antara muka, yang boleh menimbulkan kekeliruan.

Walau bagaimanapun, terdapat penyelesaian yang membolehkan penggunaan parameter jenis dalam antara muka: alihkan parameter jenis ke definisi jenis antara muka itu sendiri. Pendekatan ini mengekalkan kefungsian yang diingini sambil mematuhi had reka bentuk Go generik.

Contohnya:

type Reader[V Unmarshaler] interface {
    Read(bucket []byte, k ...[]byte) ([][]byte, error)
    ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)
}

type Unmarshaler interface {
    UnmarshalKV(v []byte) error
}

Atas ialah kandungan terperinci Mengapa Kaedah Antara Muka Generik Tidak Boleh Mempunyai Parameter Jenis?. 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