如何在 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 包。

更新於:2023-05-05

6K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告