«أمضيت ساعة أحير فيها، والحل في ثلاثة أسطر»: كيفية تحويل int إلى string في Go
\n\nتخيل: أنت تكتب خدمة مصغرة بلغة Go، وتعالج معرفات المستخدمين الرقمية، وتفاجأ بأنك بحاجة لربطها بنص في السجلات أو استجابة HTTP. تكتب شيئًا مثل str := "User_" + id — ويصدر المترجم خطأ: cannot use id (type int) as type string in concatenation. مألوف؟
هذا أحد أكثر الأسئلة شيوعًا على Stack Overflow حول Go — «How to convert an int value to string in Go?» — وقد شاهده مئات الآلاف من المرات. وليس من دون سبب: في Go، الكتابة الصارمة، ولا يمكنك ببساطة «جمع» رقم مع سلسلة. لكن لا تقلق — اليوم سنشرح جميع طرق تحويل int إلى string في Go. ستعرف أي طريقة أسرع، وأيها أكثر أمانًا، ومتى تستخدم كل منها. هيا بنا!
لماذا لا يسمح Go بجمع int و string ببساطة؟
\n\nعلى عكس JavaScript أو Python، حيث يعمل "Age: " + 25 «مباشرة»، يتطلب Go تحويلًا صريحًا للأنواع. هذا من أجل الأمان: يجب أن تتحكم دائمًا في ما يتحول إلى ماذا. تخيل أنك تجمع رقمًا مع نص عن طريق الخطأ — في لغات أخرى قد يؤدي ذلك إلى أخطاء يصعب تتبعها. في Go، سيخبرك المترجم فورًا: «توقف، هذا غير مسموح».
لذلك، لتحويل int إلى string في Go، توجد دوال خاصة من المكتبة القياسية. لا تبعيات خارجية — فقط Go نقي.
الطريقة رقم 1: fmt.Sprintf — «سكين سويسري» متعدد الاستخدامات
\n\nالطريقة الأكثر بديهية هي استخدام الدالة fmt.Sprintf. ربما تكون على دراية بها بالفعل من الإخراج المنسق. يمكنها تحويل أي شيء إلى سلسلة — أرقام، قيم منطقية، هياكل.
package main\n\nimport "fmt"\n\nfunc main() {\n age := 25\n str := fmt.Sprintf("Age: %d", age)\n fmt.Println(str) // الإخراج: Age: 25\n}\n\nالإيجابيات:
\n- \n
- مرنة جدًا: يمكنك تضمين الرقم مباشرة في السلسلة بالتنسيق المطلوب (عشري، سداسي عشري، بأصفار بادئة). \n
- مناسبة لأي نوع — ليس فقط int، بل أيضًا float و bool و struct. \n
السلبيات:
\n- \n
- تستخدم الانعكاس (reflection) داخليًا، لذا فهي أبطأ من الدوال المتخصصة. \n
- إذا كنت بحاجة فقط للحصول على سلسلة من رقم (بدون تنسيق)، فهذا مبالغ فيه. \n
متى تستخدم: عندما تحتاج ليس فقط للتحويل، بل أيضًا لتنسيق المخرجات — إضافة رموز العملات، محاذاة العرض، التحويل إلى HEX.
\n\nالطريقة رقم 2: strconv.Itoa — سريعة وبسيطة (int → string)
\n\nإذا كانت مهمتك هي فقط الحصول على تمثيل نصي للرقم، دون أي «زخارف»، استخدم strconv.Itoa. هذه دالة متخصصة لتحويل int إلى string. تعمل بسرعة ولا تقوم بعمليات غير ضرورية.
package main\n\nimport (\n "fmt"\n "strconv"\n)\n\nfunc main() {\n number := 42\n str := strconv.Itoa(number)\n fmt.Println(str) // الإخراج: "42"\n fmt.Printf("النوع: %T\\n", str) // النوع: string\n}\n\nالإيجابيات:
\n- \n
- أقصى أداء للحالة الأساسية. \n
- بساطة: دالة واحدة — إجراء واحد. \n
السلبيات:
\n- \n
- تعمل فقط مع النوع
int. إذا كان لديكint64أوint32وما إلى ذلك، يجب تحويله أولاً إلىintأو استخدام طريقة أخرى. \n - لا يوجد تحكم في نظام الأرقام — فقط تمثيل عشري. \n
متى تستخدم: عندما يكون لديك int عادي وتحتاج فقط للحصول على سلسلة — هذا هو اختيارك الافتراضي.
الطريقة رقم 3: strconv.FormatInt — التحكم في نظام الأرقام
\n\nماذا لو كنت بحاجة لتحويل رقم