• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

基于GO语言实现的支持高并发订单号生成函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 1.固定24位长度订单号,毫秒+进程id+序号。

 2.同一毫秒内只要不超过一万次并发,则订单号不会重复。

github地址:https://github.com/w3liu/go-common/blob/master/number/ordernum/ordernum.go

package ordernum

import (
   "fmt"
   "github.com/w3liu/go-common/constant/timeformat"
   "os"
   "sync/atomic"
   "time"
)

var num int64

//生成24位订单号
//前面17位代表时间精确到毫秒,中间3位代表进程id,最后4位代表序号
func Generate(t time.Time) string {
   s := t.Format(timeformat.Continuity)
   m := t.UnixNano()/1e6 - t.UnixNano()/1e9*1e3
   ms := sup(m, 3)
   p := os.Getpid() % 1000
   ps := sup(int64(p), 3)
   i := atomic.AddInt64(&num, 1)
   r := i % 10000
   rs := sup(r, 4)
   n := fmt.Sprintf("%s%s%s%s", s, ms, ps, rs)
   return n
}

//对长度不足n的数字前面补0
func sup(i int64, n int) string {
   m := fmt.Sprintf("%d", i)
   for len(m) < n {
      m = fmt.Sprintf("0%s", m)
   }
   return m
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
网络IO谁更快?Python与Go请求速度对比发布时间:2022-07-10
下一篇:
Ubuntu 下安装 Google Go 语言发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap