يتم إعطاؤك مقتطف رمز يتعامل مع الطلبات التي يتلقاها الخادم. يتحقق الكود من وجود ملف محدد، وإذا لم يكن موجودًا، فإنه يحاول فتح ملف محدد يسمى "index.html". إذا كان الملف موجودًا، فإنه يقوم بإرجاع مؤشر الملف وأي خطأ تمت مواجهته أثناء العملية.

مهمتك هي كتابة دالة تقبل اسم ملف وتقوم بإرجاع مؤشر الملف للملف المحدد. إذا كان الملف غير موجود، فيجب على الوظيفة فتح الملف "index.html" بدلاً من ذلك وإرجاع مؤشر الملف الخاص به. إذا تعذر الحصول على مؤشر الملف لأي سبب من الأسباب، فيجب أن تقوم الدالة بإرجاع خطأ مناسب.

اكتب دالة بالتوقيع التالي:

```اذهب
func OpenFile(سلسلة اسم الملف) (io.ReadCloser، خطأ)
```

**مدخل**
- `اسم الملف` (1 <= len(filename) <= 100): سلسلة تحدد اسم الملف.

**انتاج**
يجب أن ترجع الدالة قيمتين:
- `io.ReadCloser`: مقبض الملف للملف المحدد أو "index.html".
- `خطأ`: أي خطأ يحدث أثناء فتح الملف أو "index.html".

**ملحوظة**
- يفترض مقتطف الشفرة أن الثابت "الأصول" هو نظام ملفات أصول محدد مسبقًا يحتوي على الملفات التي سيتم تقديمها.
- يتم استخدام وظيفة "filepath.Join" لتسلسل أسماء الدليل والملفات بأمان، مما يضمن استخدام فاصل المسار الصحيح.

من المؤكد أنه سيتم استدعاء الوظيفة باسم ملف صالح. قد تفترض أن عمليات الاستيراد والحزم الضرورية متوفرة بالفعل في الكود.
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}