下面这段代码在长时间运行后,有一定的机率会出错,RandString(32)返回的全是 0.
从网上查的资料全局变量应该不会被回收才对。
package helper
import (
"math/rand"
"time"
)
const _charsetRand = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$"
var _seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))
// RandStringWithCharset rand string with charset
func RandStringWithCharset(length int, charset string) string {
b := make([]byte, length)
l := len(charset)
for i := range b {
b[i] = charset[_seededRand.Intn(l)]
}
return string(b)
}
// RandString rand string
func RandString(length int) string {
return RandStringWithCharset(length, _charsetRand)
}
// RandInt rand int between [min, max)
func RandInt(min int, max int) int {
if min <= 0 || max <= 0 {
return 0
}
if min >= max {
return max
}
return _seededRand.Intn(max-min) + min
}
// RandMax rand int between [0, max)
func RandMax(max int) int {
if max <= 1 {
return 0
}
return _seededRand.Intn(max)
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.