如何使用Golang在长度范围内生成唯一的随机字符串?

Lev*_*han 2 random algorithm go

我想在一个长度范围内生成唯一的随机字符串.例如,我设置的长度为10.并且每次生成的字符串都是唯一的.

小智 12

独特之处是多么独特?
如果普遍唯一,请参阅:https://en.wikipedia.org/wiki/Universally_unique_identifier
在总共128位中,类型4 UUID有6个保留位(4个用于版本和2个其他保留位),因此随机生成的UUID有122个随机位.

对于UUID,请参阅:是否有使用go语言生成UUID的方法

如何显示? (二进制到文本编码)
UUID是一个简单的128位的值.如果以十六进制格式显示,则长度32个字符.
如果你想在10个地方,128/10 = 12.8 => 13位每个地方所以你需要8192字母!

Golang中的字符串以UTF-8编码,因此您可以使用Unicode字母表:Unicode有足够的代码点,请参阅:可以使用Unicode映射多少个字符?

结论:
如果你需要通用唯一,只需使用UUID.

并参见:如何在golang中生成固定长度的随机字符串?

或者如果你需要长度为10的伪随机字符串,你可以使用它(但不是通用唯一的):

package main

import "crypto/rand"
import "fmt"

func main() {
    n := 5
    b := make([]byte, n)
    if _, err := rand.Read(b); err != nil {
        panic(err)
    }
    s := fmt.Sprintf("%X", b)
    fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)

样本输出:

FA8EA2FBCE
Run Code Online (Sandbox Code Playgroud)

另见: Go中的UUID输出为短字符串

和: 是否有一种方法来生成带有go语言的UUID