يعد إنشاء الأرقام العشوائية أمرًا مهمًا للعديد من المهام. يتضمن ذلك تطوير الألعاب والتشفير وتحليل البيانات. تسمح القيم العشوائية بنتائج مميزة مع عنصر التباين وعدم القدرة على التنبؤ.
يوفر Go حزمتين لتوليد قيم عشوائية في المكتبة القياسية: الرياضيات / الراند و تشفير / راند. ال الرياضيات / الراند الحزمة هي أساسًا للعمليات الحسابية. ال تشفير / راند الحزمة تتعامل مع عمليات آمنة مشفرة.
حزم راند
ال الرياضيات / الراند توفر الحزمة طريقة مرنة ل توليد أرقام عشوائية. يقوم بتنفيذ مجموعة متنوعة من أجيال الأرقام العشوائية الزائفة. يمكن أن تولد الحزمة رقمًا عشوائيًا بتوزيعات مختلفة ، وتستخدم البذور للتحكم في التسلسل العشوائي. يمكنه أيضًا إنشاء أرقام عشوائية بشكل متزامن أو متوازي.
ال تشفير / راند تقوم الحزمة بتنفيذ مولد رقم عشوائي آمن بشكل مشفر. يتضمن وظائف لتوليد أعداد أولية عشوائية مع احتمال كبير.
نظرًا لأن هذه الحزم لها نفس الاسم ، فستحتاج إلى استخدام الأسماء المستعارة إذا كنت تريد استخدام كلتيهما في برنامج واحد ، على سبيل المثال:
يستورد (
كراند "تشفير / راند"
السيد و "رياضيات / راند"
)
توليد عدد صحيح عشوائي في Go
يمكنك استخدام ال الرياضيات / راندIntn وظيفة لتوليد أرقام عشوائية في نطاق.
يستورد (
"FMT"
"رياضيات / راند"
"وقت"
)funcرئيسي() {
راند. البذور (الوقت. الآن (). UnixNano ())// يولد Intn عددًا صحيحًا عشوائيًا بين 0 و 100
// (لا يشمل 100)
عشوائي: = راند. Intn (100)
FMT. Println (عشوائي إنت)
}
هذا الرمز يمرر الوقت الحالي إلى بذرة وظيفة. يقوم بتهيئة مولد الأرقام العشوائي الافتراضي للعشوائية الزائفة.
ال Intn تقوم دالة الحزمة rand بإنشاء رقم عشوائي بين نطاق محدد ، في هذه الحالة ، من 0 إلى 100.
إنشاء أرقام فاصلة عائمة عشوائية
يمكنك إنشاء أرقام فاصلة عائمة عشوائية باستخدام فلوت 32 و فلوت 64 المهام. يعيدون أرقام الفاصلة العائمة 32 بت و 64 بت على التوالي.
إليك كيفية إنشاء أرقام فاصلة عائمة 64 بت عشوائية في Go.
يستورد (
"FMT"
"رياضيات / راند"
"وقت"
)funcرئيسي() {
راند. البذور (الوقت. الآن (). UnixNano ())// إنشاء عوامة عشوائية بين 0.0 و 1.0
عشوائي: = راند. Float64 ()
FMT. Println (عائم عشوائي)
}
إن عملية إنشاء أرقام الفاصلة العائمة ذات 32 بت هي نفسها عملية إنشاء أرقام فاصلة عائمة 64 بت عشوائية.
إنشاء أرقام عشوائية آمنة مشفرة في Go
يمكنك استخدام ال كثافة العمليات وظيفة تشفير / راند حزمة لإنشاء رقم عشوائي آمن بشكل مشفر. ال كثافة العمليات تأخذ الدالة مثيلاً للقارئ وأقصى رقم للحد.
يستورد (
"تشفير / راند"
"FMT"
"رياضيات / كبيرة"
)funcرئيسي() {
// إنشاء ملف. كثافة العمليات مع القيمة القصوى للنطاق المطلوب
الحد الأقصى: = كبير. NewInt (100000000)
// توليد عشوائي كبير. كثافة العمليات
// الوسيطة الأولى هي قارئ يقوم بإرجاع أرقام عشوائية
// الوسيطة الثانية هي القيمة القصوى (غير شاملة)
randInt ، يخطئ: = rand. كثافة العمليات (راند. القارئ ، بحد أقصى)
لو يخطئ! لا شيء {
FMT. Println ("خطأ في إنشاء رقم عشوائي:"، يخطئ)
يعود
}
FMT. Println ("رقم عشوائي:"، randInt)
}
ال الأعلى متغير يحدد القيمة القصوى للرقم العشوائي باستخدام نيوينت وظيفة الرياضيات / كبيرة طَرد. ال كثافة العمليات تقوم الدالة بإرجاع عدد صحيح عشوائي وخطأ في المعالجة.
توليد قيم عشوائية آمنة مشفرة
ال تشفير / راند الحزمة لا توفر وظائف مضمنة لتوليدها تشفير آمن سلاسل عشوائية. ومع ذلك ، يمكنك حل هذه المشكلة باستخدام ملف يقرأ وظيفة.
يستورد (
"تشفير / راند"
"FMT"
)funcتشفير عشوائي(سلسلة خيط، valueLength int32)خيط {
bytesSlice: = يصنع([]بايت، valueLength)
_ ، يخطئ: = راند. قراءة (bytesSlice)لو يخطئ! لا شيء {
يعود"حدث خطأ في القراءة من شريحة البايت"
}ل نقاط البيع ، القيمة: = يتراوح بايتSlice {
العشوائية: = القيمة٪ بايت(لين(سلسلة نصية))
bytesSlice [pos] = سلسلة نصية [عشوائية]
}يعودخيط(بايت شريحة)
}
funcرئيسي() {
FMT. Println (تشفير عشوائي ("نيمونولترام" +
"icroscopicsilicovolcanoconiosis", 10))
}
ال تشفير عشوائي الدالة أعلاه تأخذ في سلسلة لتوليد سلسلة عشوائية من. يأخذ أيضًا طولًا - عددًا صحيحًا 32 بت - ويعيد سلسلة.
في ال تشفير عشوائي وظيفة بايت المتغير هو شريحة من طول السلسلة المطلوب. تجتاز الحلقة for-range شريحة البايت وترجع وتسترجع معامل عناصر الشريحة وطول السلسلة بالبايت. يقوم بتحديث فهرس شريحة البايت مع فهرس القيمة المعيارية للسلسلة.
وأخيرا، فإن تشفير عشوائي تقوم الدالة بإرجاع تنسيق سلسلة شريحة البايت.
يمكنك إنشاء UUIDs باستخدام Go
يعد توليد القيم العشوائية مفيدًا لمجموعة واسعة من حالات الاستخدام. إذا كنت بحاجة إلى العديد من القيم الفريدة والعشوائية ، فيمكنك استخدام UUIDs.
UUIDs (المعرفات الفريدة عالميًا) تضمن التفرد العالمي للمعرفات. يمكنك استخدامها للتمييز بين الموارد عبر الأنظمة مع تجنب تعارض التسمية.
هناك العديد من الحزم التي يمكنك استخدامها لإنشاء UUIDs في Go. يمكنك استخدام حزمة نظام التشغيل لاستدعاء uuid الأمر على نظام التشغيل الخاص بك ، أو اللجوء إلى حزمة UUID من Google ، أو استخدام حزمة gouuid للإنشاء UUIDs.