الربط الفعال للسلاسل النصية في Go: كيفية ربط السلاسل بشكل صحيح وسريع
مرحباً بالجميع! لقد بدأت للتو في تعلم Go وواجهت مشكلة في الأداء عند العمل مع السلاسل النصية. أحتاج إلى تجميع تقرير HTML كبير من أجزاء متعددة. في البداية، استخدمت ببساطة العامل `+`:
```go
var result string
for i := 0; i < 100000; i++ {
result += fmt.Sprintf("
%d
", i)
}
```
هذا الكود يعمل ببطء شديد ويستهلك الكثير من الذاكرة. قرأت أن السلاسل النصية في Go غير قابلة للتغيير، وكل عملية `+` تنشئ سلسلة جديدة، وتنسخ البيانات القديمة. بالنسبة لـ 100,000 تكرار، يؤدي هذا إلى تكاليف إضافية هائلة.
جربت استخدام `strings.Join`، لكنه يعمل فقط مع شرائح السلاسل النصية، بينما أحتاج إلى إضافة عناصر ديناميكياً في حلقة. سمعت أيضاً عن `bytes.Buffer` و `strings.Builder`. أي من هذه الأساليب هو الأصح والأكثر كفاءة في Go؟ من المهم بالنسبة لي ليس فقط تسريع الكود، ولكن أيضاً تقليل تخصيص الذاكرة وعمل جامع القمامة.
سأكون ممتناً لأمثلة محددة مع اختبارات الأداء أو على الأقل شرح لماذا