Tạo số ngẫu nhiên với Go
Tạo số ngẫu nhiên rất quan trọng đối với nhiều nhiệm vụ. Chúng bao gồm phát triển trò chơi, mã hóa và phân tích dữ liệu. Các giá trị ngẫu nhiên cho phép tạo ra các kết quả khác biệt với yếu tố có thể thay đổi và không thể đoán trước.
Go cung cấp hai gói để tạo các giá trị ngẫu nhiên trong thư viện chuẩn: toán/rand Và tiền điện tử/rand. Các toán/rand gói chủ yếu dành cho các hoạt động toán học. Các tiền điện tử/rand gói xử lý các hoạt động bảo mật bằng mật mã.
Mục Lục
Gói Rand
Các toán/rand gói cung cấp một phương pháp linh hoạt để tạo số ngẫu nhiên. Nó thực hiện nhiều thế hệ số giả ngẫu nhiên. Gói có thể tạo một số ngẫu nhiên với các bản phân phối khác nhau và sử dụng các hạt giống để kiểm soát chuỗi ngẫu nhiên. Nó cũng có thể tạo các số ngẫu nhiên đồng thời hoặc song song.
Các tiền điện tử/rand gói thực hiện một trình tạo số ngẫu nhiên an toàn bằng mật mã. Nó bao gồm chức năng tạo các số nguyên tố ngẫu nhiên với xác suất cao.
Vì các gói này có cùng tên, bạn sẽ cần sử dụng bí danh nếu muốn sử dụng cả hai trong một chương trình, ví dụ:
import (
crand "crypto/rand"
mrand "math/rand"
)
Tạo số nguyên ngẫu nhiên trong Go
Bạn có thể dùng toán / rand quán trọ chức năng tạo số ngẫu nhiên trong một dãy.
import (
"fmt"
"math/rand"
"time"
)func main() {
rand.Seed(time.Now().UnixNano())
randomInt := rand.Intn(100)
fmt.Println(randomInt)
}
Mã này chuyển thời gian hiện tại đến Hạt giống chức năng. Nó khởi tạo trình tạo số ngẫu nhiên mặc định cho giả ngẫu nhiên.
Các quán trọ chức năng của gói rand tạo ra một số ngẫu nhiên trong một phạm vi được chỉ định, trong trường hợp này là từ 0 đến 100.
Tạo số dấu phẩy động ngẫu nhiên
Bạn có thể tạo các số dấu phẩy động ngẫu nhiên với phao32 Và phao64 chức năng. Chúng trả về các số dấu phẩy động 32 bit và 64 bit tương ứng.
Đây là cách bạn có thể tạo các số dấu phẩy động 64-bit ngẫu nhiên trong Go.
import (
"fmt"
"math/rand"
"time"
)func main() {
rand.Seed(time.Now().UnixNano())
randomFloat := rand.Float64()
fmt.Println(randomFloat)
}
Quá trình tạo số dấu phẩy động 32-bit cũng giống như quá trình tạo số dấu phẩy động 64-bit ngẫu nhiên.
Tạo số ngẫu nhiên bảo mật bằng mật mã trong Go
Bạn có thể dùng số nguyên chức năng của tiền điện tử/rand gói để tạo số ngẫu nhiên được bảo mật bằng mật mã. Các số nguyên chức năng nhận trong một phiên bản trình đọc và số lượng tối đa cho giới hạn.
import (
"crypto/rand"
"fmt"
"math/big"
)func main() {
max := big.NewInt(100000000)
randInt, err := rand.Int(rand.Reader, max)
if err != nil {
fmt.Println("Error generating random number:", err)
return
}
fmt.Println("Random number:", randInt)
}
Các tối đa biến xác định giá trị tối đa cho số ngẫu nhiên bằng cách sử dụng Int mới chức năng của toán / lớn bưu kiện. Các số nguyên hàm trả về số nguyên ngẫu nhiên và lỗi để xử lý.
Tạo các giá trị ngẫu nhiên bảo mật bằng mật mã
Các tiền điện tử/rand gói không cung cấp chức năng tích hợp sẵn để tạo các chuỗi ngẫu nhiên bảo mật bằng mật mã. Tuy nhiên, bạn có thể giải quyết vấn đề này bằng cách sử dụng Đọc chức năng.
import (
"crypto/rand"
"fmt"
)func cryptoRandom(stringChars string, valueLength int32) string {
bytesSlice := make([]byte, valueLength)
_, err := rand.Read(bytesSlice)
if err != nil {
return "There was an error reading from the byte slice"
}
for pos, value := range bytesSlice {
randomize := value % byte(len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}
return string(bytesSlice)
}
func main() {
fmt.Println(cryptoRandom("Pneumonoultram" +
"icroscopicsilicovolcanoconiosis", 10))
}
Các tiền điện tửRandom hàm trên nhận vào một chuỗi để tạo ra một chuỗi ngẫu nhiên từ đó. Nó cũng lấy một độ dài—một số nguyên 32 bit—và trả về một chuỗi.
bên trong tiền điện tửRandom chức năng, các byteSlice biến là một lát có độ dài chuỗi cần thiết. Vòng lặp for-range đi qua lát cắt byte và trả về và truy xuất mô đun của các phần tử của lát cắt và độ dài của chuỗi tính bằng byte. Nó cập nhật chỉ mục của lát byte với chỉ mục giá trị modulo của chuỗi.
cuối cùng tiền điện tửRandom trả về định dạng chuỗi của lát byte.
Bạn có thể tạo UUID với Go
Tạo các giá trị ngẫu nhiên có ích cho nhiều trường hợp sử dụng. Nếu bạn cần nhiều giá trị ngẫu nhiên, duy nhất, bạn có thể sử dụng UUID.
UUID (Số nhận dạng duy nhất toàn cầu) đảm bảo tính duy nhất toàn cầu cho số nhận dạng. Bạn có thể sử dụng chúng để phân biệt giữa các tài nguyên trên các hệ thống trong khi tránh xung đột đặt tên.
Có nhiều gói bạn có thể sử dụng để tạo UUID trong Go. Bạn có thể sử dụng gói os để gọi lệnh uuid trên hệ điều hành của mình, sử dụng gói UUID của Google hoặc sử dụng gói gouuid để tạo UUID.