- 主 API:
NextID() (int64, error),时钟回拨、配置错误等返回error,不再使用log.Fatal结束进程。 - 兼容:
NextId() int64仍保留,出错时 panic(与旧版遇错即退出相比,可被recover)。 - 多实例:通过环境变量
SNOWFLAKE_WORKER_ID、SNOWFLAKE_DATACENTER_ID(均为 0~31)区分机器,避免多进程发号冲突。 - 链式配置:
WithTwepoch/WithWorkerId/WithDatacenterId非法时写入内部错误,后续NextID返回该错误(可errors.Is判断ErrInvalidWorkerID等)。
go get github.com/iautre/snowflakeimport "github.com/iautre/snowflake"
id, err := snowflake.NextID()
if err != nil {
// 处理时钟回拨等
}
// 兼容旧代码(出错 panic):
id64 := snowflake.NextId()
s := snowflake.String() // 等价于 FormatInt(NextId(), 10),出错时 panicsf := snowflake.NewSnowflake().WithTwepoch(1655647200000).WithWorkerId(1).WithDatacenterId(1)
id, err := sf.NextID()
str, err := sf.NextString()部署多副本时建议设置:
SNOWFLAKE_WORKER_ID:0~31SNOWFLAKE_DATACENTER_ID:0~31