
Go 生成 36 进制 10 字符方案一随机生成最简单gopackage main import ( crypto/rand fmt math/big ) const base36 0123456789abcdefghijklmnopqrstuvwxyz // 随机生成10位36进制字符串 func GenBase36Random() string { const length 10 result : make([]byte, length) for i : range result { n, _ : rand.Int(rand.Reader, big.NewInt(36)) result[i] base36[n.Int64()] } return string(result) } func main() { for i : 0; i 5; i { fmt.Println(GenBase36Random()) } }方案二基于时间戳/序号有序、可排序gopackage main import ( fmt time ) // 数字转36进制不足10位前面补0 func ToBase36(n uint64) string { if n 0 { return 0000000000 } const base36 0123456789abcdefghijklmnopqrstuvwxyz var result [10]byte for i : 9; i 0; i-- { result[i] base36[n%36] n / 36 if n 0 i 0 { // 剩余位补0 for j : 0; j i; j { result[j] 0 } break } } return string(result[:]) } func main() { // 基于毫秒时间戳52位刚好在范围内 ts : uint64(time.Now().UnixMilli()) fmt.Println(时间戳:, ts) fmt.Println(36进制:, ToBase36(ts)) // 基于自增序号 for i : uint64(0); i 5; i { fmt.Println(ToBase36(i)) } }方案三高性能批量生成使用 sync/atomicgopackage main import ( fmt sync/atomic ) var counter uint64 func GenBase36Sequential() string { n : atomic.AddUint64(counter, 1) return ToBase36(n) } func main() { for i : 0; i 10; i { fmt.Println(GenBase36Sequential()) } }关键信息表格属性值字符集0-9a-z36个字符最大表示范围36¹⁰ - 1≈3.66 千万亿等效二进制约52 bit典型用途短ID、订单号、邀请码、URL缩短10位36进制比16位16进制更短比纯数字能表示更大范围是生成短ID的理想选择。