كيفية إنشاء سلسلة عشوائية بطول ثابت في Go؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم Go وواجهت مهمة نموذجية: أحتاج إلى إنشاء سلاسل عشوائية بطول معين، على سبيل المثال، لإنشاء معرفات فريدة أو رموز أو كلمات مرور. لقد كتبت هذا الكود:
```go
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println(RandString(10))
}
func RandString(n int) string {
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
```
الكود يبدو أنه يعمل، لكنني لاحظت سلوكًا غريبًا: في كل مرة يتم تشغيل البرنامج، يتم إنشاء نفس السلسلة. لقد بحثت في Google وعلمت أنني بحاجة إلى استخدام `rand.Seed()`، ولكن حتى بعد إضافة `rand.Seed(time.Now().UnixNano())`، تتكرر السلاسل أحيانًا إذا تم تشغيل البرنامج عدة مرات متتالية بسرعة كبيرة.
بالإضافة إلى ذلك، أنا مهتم بأفضل الممارسات: كيف يمكن جعل التوليد آمنًا من الناحية التشفيرية؟