1.2.4 生成随机字符串

一、用main/rand包生成随机字符串

  1. main/rand实现了伪随机数生成器,可以生成整数型和浮点型伪随机数

  2. 该包中根据生成伪随机数是否有种子(可以理解为初始化随机数),可以分为以下两类:

    1. 有种子:通常以时钟、输入输出等特殊及特殊节点作为参数进行初始化。该类型生成的随机数相比无种子时重复概率较低

    2. 无种子:可以理解为此时种子为1

  3. 案例:

    // GetRandomString 获取随机字符串
    func GetRandomString(num int) string {
    	// 声明字符串
    	str := "0123456789abcdefghijklmnopqrstuvwxyz"
    	// 转换成数组
    	bytes := []byte(str)
    	result := []byte{}
    	r := rand.New(rand.NewSource(time.Now().UnixNano()))
    	for i := 0; i < num; i++ {
    		result = append(result, bytes[r.Intn(len(bytes))])
    	}
    	return string(result)
    }
    
    func main() {
    	// 获取6位随机字符串
    	b := GetRandomString(6)
    	fmt.Println(b)
    }

    结果:每次结果不同

二、使用crypot/rand包生成随机字符串

  1. 如果对随机性有要求的话,可以使用crypot/rand包实现(速度相对会慢一些)

  2. crypot/rand包实现了用于加解密的更安全的随机数生成器,该包中常用的是Read()函数,定义如下:

三、用哈希值来表示随机字符串

  1. 除上面两个方法外,还有一个不常用的方法:用哈希值来表示随机字符串

  2. 可以通过crypot/md5包的new()函数来实现

Last updated