对于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