如何在 Go 語言中生成隨機字串字元?
在許多程式設計應用程式中,生成隨機字串或字元是一項常見任務,從生成隨機密碼到生成唯一 ID 都是如此。在本文中,我們將探討如何在 Go 語言中生成隨機字串或字元。
使用 math/rand 包
Go 語言中的 math/rand 包提供了一種簡單的方法來生成隨機數和字串。要生成隨機字串,我們可以先生成一個隨機數,然後將其轉換為字串。
示例
以下是一種簡單的方法:
package main
import (
"fmt"
"math/rand"
"time"
)
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
func generateRandomString(length int) string {
b := make([]byte, length)
for i := range b {
b[i] = charset[seededRand.Intn(len(charset))]
}
return string(b)
}
func main() {
randomString := generateRandomString(10)
fmt.Println(randomString)
}
在此程式碼中,我們定義了一個名為 charset 的常量,其中包含我們希望包含在隨機字串中的字元集。我們還定義了一個全域性的 seededRand 變數,用於生成隨機數。
然後,我們定義了一個名為 generateRandomString 的函式,它接受一個整數引數 length 並返回長度為 length 的隨機字串。該函式建立一個長度為 length 的空位元組切片,然後為切片的每個索引生成一個來自 charset 字串的隨機字元。最後,我們將位元組切片轉換為字串並返回它。
在 main 函式中,我們生成一個長度為 10 的隨機字串並將其列印到控制檯。
輸出
dSJGOaf3BR
使用 crypto/rand 包
雖然 math/rand 包適用於許多應用程式,但它不適用於加密目的。對於生成用於加密目的的隨機字串,我們應該改為使用 crypto/rand 包。
示例
以下是如何使用 crypto/rand 包生成隨機字串的示例:
package main
import (
"crypto/rand"
"encoding/base64"
"fmt"
)
func generateRandomString(length int) string {
b := make([]byte, length)
_, err := rand.Read(b)
if err != nil {
panic(err)
}
return base64.StdEncoding.EncodeToString(b)
}
func main() {
randomString := generateRandomString(10)
fmt.Println(randomString)
}
在此程式碼中,我們定義了一個名為 generateRandomString 的函式,它接受一個整數引數 length 並返回長度為 length 的隨機字串。該函式首先建立一個長度為 length 的空位元組切片。然後,我們使用 crypto/rand 包中的 rand.Read 函式用隨機位元組填充該切片。最後,我們將位元組切片編碼為 base64 字串並返回它。
在 main 函式中,我們生成一個長度為 10 的隨機字串並將其列印到控制檯。
輸出
A5lNf2rprREAmg==
結論
在 Go 語言中生成隨機字串或字元可以使用 math/rand 包或 crypto/rand 包來實現。雖然 math/rand 包適用於許多應用程式,但對於生成用於加密目的的隨機字串,應使用 crypto/rand 包。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP