[Golang] 生成随机字符串

对于Golang生成随机字符串这件事情很蛋疼。

对于伪随机字符串(会永久的生成同一个随机字符串)

 

func RandStr(length int) string {
    var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    b := make([]rune, length)
    for i := range b {
        b[i] = letters[rand.Intn(len(letters))]
    }
    return string(b)
}

这样生成的随机字符串是永久的同样的字符串。
下面,我演进了一个方案,同样是用的math/rand包里的方法来实现的

func RandStr(length int) string {
	str := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
	bytes := []byte(str)
	result := []byte{}
	rand.Seed(time.Now().UnixNano()+ int64(rand.Intn(100)))
	for i := 0; i < length; i++ {
		result = append(result, bytes[rand.Intn(len(bytes))])
	}
	return string(result)
}

这个方法是以时间戳作为seed,然后再加上一个随机数,来作为随机因子来进行随机。
用了这个方法时候,直接就一库了。这个方法重复的概率极低。如果是平常的注册用户来用的话,基本上就不用担心了。

当然也可以用crypto/rand 这个包来实现,由于我已经实现了极低概率的随机字符串就没看了,有兴趣的小伙伴可以自己去实现(抄)一下。
参考地址:http://ju.outofmemory.cn/entry/221647

未经允许不得转载:RffanLAB|Rffan实验室 » [Golang] 生成随机字符串

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址