كفاءة io.Reader في Go: معركة مع التوجيه غير المباشر والتحقق من الأنواع
2025-05-19
تستخدم العديد من دوال Go واجهة io.Reader كمدخل، مما يسمح بالبث المباشر وتجنب تحميل كل شيء في الذاكرة. ومع ذلك، عندما يكون لديك بالفعل البايتات، فإن استخدامها مباشرة يكون أكثر كفاءة. تصف هذه المقالة تجربة الكاتب في فك تشفير الصور باستخدام libavif و libheif. من أجل البساطة، تم استخدام واجهات الذاكرة البسيطة، ولكن دالة image.Decode في Go تتحقق مما إذا كانت هناك دالة Peek في io.Reader، وتغلفها بـ bufio.Reader إذا لم يتم العثور عليها، مما يمنع الاستخدام المباشر لـ bytes.Reader. يستخدم الكاتب تأكيدات الأنواع و unsafe.Pointer لتجاوز bufio.Reader و bytes.Reader، لتحقيق نسخة صفرية. ومع ذلك، تسلط المقالة الضوء على مشاكل في التحقق من النوع وتصميم الواجهة في Go، بما في ذلك "واجهات برمجة التطبيقات الظليلة" الناتجة.
التطوير