چرا «انواع غیرقابل مقایسه» در Go بیش از یک خطای کامپایلر هستند؟

در حین کار بر روی یک تابع عمومی در Go، یک بار با این خطا مواجه شدم: “انواع غیر قابل مقایسه در مجموعه نوع”.

این باعث شد تا عمیق‌تر در آن کاوش کنم comparable محدودیت – یک ویژگی به ظاهر ساده که پیامدهای عمیقی برای ژنریک های Go دارد. این اولین کار من با مواد ژنریک نبود، اما نکته مهمی را برجسته کرد که اغلب نادیده گرفته می‌شود. این پایه و در عین حال به‌طور شگفت‌انگیز شهودی است و جنبه‌ای نادیده گرفته شده از کلیات Go است که می‌تواند شما را از اشکال‌زدایی غیرضروری و خطاهای احتمالی زمان اجرا نجات دهد.

با این پست کوتاه، شما را از طریق چه چیزی راهنمایی می کنم comparable این است که چرا مفید است و چگونه می توانید از آن برای کد Go تمیزتر و ایمن استفاده کنید. اگر یک مبتدی یا حتی یک Gopher در سطح متوسط ​​اولیه هستید، این برای شما مناسب است.


چرا comparable?


سیستم تایپ Go بسیار ساده و سختگیرانه است. اما زمانی که ژنریک ها با Go 1.18 وارد صحنه شدند، ابزار جدیدی برای نوشتن کد قابل استفاده مجدد و ایمن به دست آوردیم. در کنار معرفی any (نام مستعار برای interface{}) گرفتیم comparable. بنابراین، معامله چیست؟

به زبان ساده، comparable یک محدودیت است که تضمین می کند یک نوع از مقایسه برابری پشتیبانی می کند (== و !=).

در Go، فقط انواع خاصی ذاتاً قابل مقایسه هستند. اینها شامل انواع ابتدایی مانند int، float64 و string، اما انواعی مانند برش ها، نقشه ها و توابع را حذف کنید. این به این دلیل است که …

Source link