تخطَّ إلى المحتوى

bytes.CutLast

تقطيع بايتات عند آخر ظهور لفاصل bytes.CutLast

bytes.CutLast (منذ Go 1.27) تقطّع شريحة بايتات عند آخر ظهور لفاصل محدَّد، معاكسة لـ bytes.Cut التي تقطع عند أول ظهور — تبسّط حالات شائعة كانت تحتاج LastIndex يدويًا.

قبل Go 1.27، القطع عند آخر ظهور لفاصل (مثل استخراج امتداد ملف من مساره، أو الجزء الأخير بعد آخر نقطتين متتاليتين) كان يحتاج استخدام bytes.LastIndex يدويًا ثم تقطيع الشريحة بنفسك بالفهرس الناتج. bytes.CutLast تختصر هذا مباشرة بدالة واحدة، بنفس شكل القيم المُعادة لـ bytes.Cut تمامًا (before، after، found) لكن معكوسة الاتجاه.

لو لم يظهر الفاصل بالشريحة أصلًا، تعيد الدالة الشريحة الأصلية كاملة بـ before، وnil بـ after، وfound يساوي false — بالضبط نفس سلوك Cut بالفشل لكن بترتيب معكوس منطقيًا (before يحمل كل شيء بدل after).

الصياغة

func CutLast(s, sep []byte) (before, after []byte, found bool)

📄 مثال

path := []byte("archive.tar.gz")
before, after, found := bytes.CutLast(path, []byte("."))
fmt.Println(string(before), string(after), found)
// archive.tar gz true -- يقطع عند آخر نقطة لا الأولى

أهم النقاط

العنصرالوظيفة
beforeكل ما قبل آخر ظهور للفاصل — الشريحة كاملة لو الفاصل غير موجود
afterكل ما بعد آخر ظهور للفاصل — nil لو الفاصل غير موجود
foundtrue لو وُجد الفاصل بالشريحة، false غير ذلك

💡 نصائح عملية

  • استخدمها بدل LastIndex اليدوي كلما احتجت الجزء الأخير بعد فاصل متكرّر (امتداد ملف، آخر جزء بمسار) — أوضح وأقل عرضة لخطأ حساب الفهرس يدويًا

⚠️ أخطاء شائعة

  • استخدام bytes.Cut (القاطع عند أول ظهور) ظنًّا أنه يقطع عند الأخير — لفاصل يتكرّر أكثر من مرّة النتيجة تختلف تمامًا بين الدالتين

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.