package model import ( "log" "os" "strconv" "sync" "github.com/bwmarrin/snowflake" ) var ( snowflakeNode *snowflake.Node snowflakeOnce sync.Once ) func getSnowflakeNode() *snowflake.Node { snowflakeOnce.Do(func() { nodeID := int64(1) if raw := os.Getenv("MEMORA_SNOWFLAKE_NODE"); raw != "" { if parsed, err := strconv.ParseInt(raw, 10, 64); err == nil { nodeID = parsed } } node, err := snowflake.NewNode(nodeID) if err != nil { log.Panicf("init snowflake node failed: %v", err) } snowflakeNode = node }) return snowflakeNode } func NewID() string { return getSnowflakeNode().Generate().String() }