golang雪花算法实现64位的ID
- 推荐学习文档
- golang应用级os框架,欢迎star
- golang应用级os框架使用案例,欢迎star
- 案例:基于golang开发的一款超有个性的旅游计划app经历
- golang实战大纲
- golang优秀开发常用开源库汇总
- 想学习更多golang知识,这里有免费的golang学习笔记专栏
以下是使用 Go 语言实现雪花算法生成 64 位 ID 的示例代码:
package mainimport ("fmt""sync""time"
)const (// 起始时间戳(2020-01-01)twepoch = 1577836800000workerIDBits = 5datacenterIDBits = 5sequenceBits = 12maxWorkerID = -1 ^ (-1 << workerIDBits)maxDatacenterID = -1 ^ (-1 << datacenterIDBits)maxSequence = -1 ^ (-1 << sequenceBits)workerIDShift = sequenceBitsdatacenterIDShift = sequenceBits + workerIDBitstimestampLeftShift = sequenceBits + workerIDBits + datacenterIDBits
)type Snowflake struct {mu sync.MutexlastTimestamp int64workerID int64datacenterID int64sequence int64
}func NewSnowflake(workerID, datacenterID int64) (*Snowflake, error) {if workerID < 0 || workerID > maxWorkerID {return nil, fmt.Errorf("worker ID must be between 0 and %d", maxWorkerID)}if datacenterID < 0 || datacenterID > maxDatacenterID {return nil, fmt.Errorf("datacenter ID must be between 0 and %d", maxDatacenterID)}return &Snowflake{workerID: workerID,datacenterID: datacenterID,lastTimestamp: -1,sequence: 0,}, nil
}func (s *Snowflake) NextID() int64 {s.mu.Lock()defer s.mu.Unlock()timestamp := time.Now().UnixNano() / 1e6if timestamp < s.lastTimestamp {return 0}if s.lastTimestamp == timestamp {s.sequence = (s.sequence + 1) & maxSequenceif s.sequence == 0 {for timestamp <= s.lastTimestamp {timestamp = time.Now().UnixNano() / 1e6}}} else {s.sequence = 0}s.lastTimestamp = timestampreturn ((timestamp - twepoch) << timestampLeftShift) |(s.datacenterID << datacenterIDShift) |(s.workerID << workerIDShift) |s.sequence
}
你可以使用以下方式调用:
func main() {sf, err := NewSnowflake(1, 1)if err!= nil {panic(err)}id := sf.NextID()fmt.Println(id)
}
这个实现创建了一个雪花算法的结构体Snowflake,通过互斥锁保证并发安全。它根据当前时间戳、工作节点 ID、数据中心 ID 和序列号生成唯一的 64 位 ID。生成的 ID 是一个递增的数字,具有时间顺序性,并且在分布式系统中可以保证唯一性。
希望本文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。
关注我看更多有意思的文章哦!👉👉
相关文章:
golang雪花算法实现64位的ID
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
LeetCode 137. 只出现一次的数字 II
LeetCode 137. 只出现一次的数字 II 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1:…...

新书推荐——《深度学习精粹与PyTorch实践》
深度学习绝非不可窥探的黑箱!深入理解其模型和算法的实际运作机制,是驾驭并优化结果的关键。你无需成为数学专家或资深数据科学家,同样能够掌握深度学习系统内部的工作原理。 本书旨在通过深入浅出的方式,为你揭示这些原理,让你在理解和解释…...

Docker:解决开发运维问题的开源容器化平台
云计算de小白 Docker是一个开源的容器化平台,可以将应用程序及其依赖的环境打包成轻量级、可移植的容器。 Docker为什么这么受欢迎呢?原因很简单:Docker可以解决不同环境一致运行的问题,而且占用资源少,速度快。 所以好的东西…...
多线程计算π
1、实现单线程计算π 2、使用任务分解方法,使用2线程,并行计算π 3、使用数据分解方法,使用2线程,并行计算π 注意:在循环中使用以上计算π的公式,n取值为1到Int.Max 问题1: import java.lang.*;public class Thread1 extends Thread{@Overridepublic void run(){l…...

JAVA开源项目 足球俱乐部管理后台 计算机毕业设计
博主说明:本文项目编号 T 051 ,文末自助获取源码 \color{red}{T051,文末自助获取源码} T051,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

Arthas memory(查看 JVM 内存信息)
文章目录 二、命令列表2.1 jvm相关命令2.1.11 memory(查看 JVM 内存信息)举例1:查看 JVM 内存信息 二、命令列表 2.1 jvm相关命令 2.1.11 memory(查看 JVM 内存信息) 基本用法: memory 举例1:…...
C#车辆登记证识别API接口集成示例-车辆合格证识别免费的API接口
车辆登记证识别接口是一种OCR技术,基于深度学习算法,可快速、精准、自动识别车辆登记证上的文字信息。目前,车辆合格证识别的应用场景主要集中在与车辆相关的各类业务流程中,特别是汽车行业、物流运输和车辆管理等领域。 1.汽车销…...
学习笔记每日一题
给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中: answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] "Fizz…...

【巅峰算力,静谧之作】4卡4090GPU深度学习“静音”服务器
各位同仁,随着人工智能浪潮的汹涌澎湃,我们正步入一个前所未有的创新纪元。在这个充满挑战与机遇的时代,我愈发频繁地在工作场景中邂逅那些致力于深度学习探索的智者们。他们,对计算力的渴望如同对知识的追求一般,永无…...
论JAVA 两种“对象比较接口“的区别
前言 总所周知,java对象的比较有 三种方式 最简单的是可以调用equals(). 因为这个方法定义在Object类中,而我们的类都继承了Object类.所以我们自己定义的类都可以使用这个方法. 除此以外还有两个比较接口,可以通过实现他们的某些方法比较我们的对象 他们是 Com…...
在线代理提取IP:一文详解其含义和应用
在互联网时代,IP地址就像是每台设备的“身份证”。然而,有时候,我们需要隐藏或更改这个“身份证”,这时候,代理IP就派上了用场。那么,在线代理提取IP究竟是什么意思呢?让我们一起来探讨一下。 …...
linux-字符串函数使用
linux-字符串函数使用 输入输出长度大小拼接拷贝填充查找比较 字符串的输入,输出,长度,大小,拼接,拷贝,填充,查找,比较 输入 相关的函数有: gets()、getchar()、fgetc(…...
Python 06 Set
Python 实例教程 Python 实例教学_ 06_集合第二十八课[2351. 第一个出现两次的字母](https://leetcode.cn/problems/first-letter-to-appear-twice/)[217. 存在重复元素](https://leetcode.cn/problems/contains-duplicate/)[219. 存在重复元素 II](https://leetcode-cn.com/pr…...
ControllerAdvice定义统一异常处理
springboot版本:2.6.13<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>在实体上添加校验注解,例如: NotBlankNotEmpty…...
Leetcode 162.寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须实现时间复杂度为 O(…...

c语言:知识补充
c语言中编译开始会对#define,#include等内容做预处理,可以用#define写一些简单函数,方便使用 #include <stdio.h> #include <stdlib.h>#define MAX(A, B) ((A) > (B) ? (A) : (B))int main(){printf("%d\n", MAX(…...

Dapper介绍及特性
一、Dapper介绍及特性 Dapper是一个.NET平台上的轻量级对象关系映射(ORM)工具,它通过扩展IDbConnection接口,提供了一系列的扩展方法来执行SQL查询并将结果映射到.NET对象中。Dapper以其高性能和简单易用著称,特别适合…...

LeetCode 149. 直线上最多的点数
LeetCode 149. 直线上最多的点数 给你一个数组 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points [[1,1],[2,2],[3,3]] 输出:3 示例 2: 输入&…...

案例研究丨国控星鲨利用DataEase释放数据潜能,重塑业务视野
国药控股星鲨制药(厦门)有限公司(以下简称为国控星鲨)始创于1952年,前身为厦门鱼肝油厂,距今已经有70余年历史,是国家商务部认定的“中华老字号”企业。2011年,国药控股与厦门轻工集…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...