كيفية إنشاء UUID في Go؟ لا توجد دالة مدمجة؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم Go وواجهت مهمة: أحتاج إلى إنشاء معرفات فريدة (UUID) للسجلات في قاعدة البيانات. في Python، اعتدت استخدام `uuid.uuid4()`، أما في Go، فبغض النظر عن بحثي في المكتبة القياسية، لم أجد شيئًا مشابهًا. فقط `crypto/rand` للأرقام العشوائية و `fmt.Sprintf` للتنسيق.
حاولت كتابة تطبيقي الخاص — فقط إنشاء 16 بايت عشوائي ووضع الشرطات يدويًا، كما في تنسيق UUID القياسي. لكن، أولاً، يبدو هذا غير أنيق، وثانيًا، لست متأكدًا من أن البايتات ستتوافق مع إصدار UUID 4 (عشوائي). الكود الخاص بي:
```go
package main
import (
"crypto/rand"
"fmt"
)
func main() {
b := make([]byte, 16)
_, err := rand.Read(b)
if err != nil {
panic(err)
}
uuid := fmt.Sprintf("%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
fmt.Println(uuid)
}
```
هذا الكود يعمل، لكنه لا يضبط الإصدار والبديل الصحيحين لـ UUID (البتات