对于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] 生成随机字符串