كيفية تحويل مصفوفة بايتات منتهية بصفر إلى سلسلة نصية في Go؟
مرحباً بالجميع! لقد بدأت للتو في تعلم Go وواجهت مشكلة أثناء العمل مع سلاسل C النصية. أحتاج إلى قراءة بيانات من مصدر خارجي (مثل syscall أو مكتبة C عبر cgo) يعيد مصفوفة بايتات تنتهي ببايت صفري (`\0`). في Go، السلاسل النصية هي مجرد شرائح من البايتات، لكنها ليست ملزمة بأن تكون منتهية بصفر، والبايت الصفري داخل السلسلة يُعتبر حرفاً عادياً.
لدي هذا الكود:
```go
package main
import "fmt"
func main() {
// مثال: مصفوفة بايتات تم الحصول عليها من دالة C
data := []byte{'H', 'e', 'l', 'l', 'o', 0, 'W', 'o', 'r', 'l', 'd', 0}
// تحويل بسيط إلى سلسلة نصية
str := string(data)
fmt.Println(str) // سيطبع "Hello" وبيانات غير مرغوب فيها؟ أم "Hello\0World"؟
}
```
المشكلة هي أنني إذا قمت ببساطة بـ `string(data)`، فستدخل جميع البايتات إلى السلسلة النصية، بما في ذلك البايتات الصفرية وكل ما بعد أول صفر. بينما أحتاج فقط إلى الحصول على الجزء حتى أول صفر (كما في C — تنتهي السلسلة عند `\0`).