Dalam Go, mentakrifkan antara muka generik dengan parameter jenis boleh membawa kepada isu inferens semasa melaksanakan dan menggunakannya. Artikel ini menangani ralat "tidak boleh membuat kesimpulan V: parameter jenis inferen daripada pelaksanaan kekangan" dalam senario sedemikian.
Pertimbangkan antara muka ConfigStorage dengan parameter jenis K dan V, di mana V memanjangkan WritableType . Pelaksanaan storan sistem fail antara muka ini, FileSystemStorage, ditakrifkan. Walau bagaimanapun, apabila cuba menggunakan fungsi generik GetValue, ralat kompilasi timbul disebabkan ketidakupayaan untuk membuat kesimpulan jenis V.
Go 1.21 and Higher:
Isu ini diselesaikan dalam Go 1.21 dan kemudian kerana inferens jenis telah dipertingkatkan untuk dipertimbangkan tandatangan kaedah dalam antara muka. Argumen jenis untuk parameter jenis dalam tandatangan kaedah boleh disimpulkan daripada parameter yang sepadan dalam kaedah yang sepadan.
Untuk menggunakan GetValue tanpa menyatakan kekangan jenis:
result, _ = GetValue(fileStorage, "key")
Go 1.20 and Lower:
Untuk versi Go terdahulu, inferens V daripada jenis melaksanakan kekangan tidak disokong. Parameter jenis eksplisit mesti disediakan apabila memanggil GetValue:
GetValue[string, string](fileStorage, "key")
Ralat timbul kerana fungsi GetValue cuba membuat kesimpulan jenis V daripada argumen yang disediakan: argumen pertamanya, penyimpanan , dan hujah kedua, kunci. Walau bagaimanapun, hujah ini sahaja tidak memberikan maklumat yang mencukupi untuk menentukan V kerana storan ialah nilai antara muka yang mungkin melaksanakan berbilang jenis.
Menentukan parameter jenis secara eksplisit menghapuskan kekaburan untuk pengkompil. Ia membenarkan algoritma inferens jenis menyimpulkan jenis V yang betul berdasarkan hujah yang disediakan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan 'tidak boleh membuat kesimpulan V: parameter jenis infer daripada pelaksanaan kekangan' dalam Antara Muka Generik Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!