go get github.com/bwmarrin/snowflake
package main import ( "fmt" "github.com/bwmarrin/snowflake" ) func main() { // Create a new Node with a Node number of 1 node, err := snowflake.NewNode(1) if err != nil { fmt.Println(err) return } // Generate a snowflake ID. id := node.Generate() // Print out the ID in a few different ways. fmt.Printf("Int64 ID: %d\n", id) fmt.Printf("String ID: %s\n", id) fmt.Printf("Base2 ID: %s\n", id.Base2()) fmt.Printf("Base64 ID: %s\n", id.Base64()) // Print out the ID's timestamp fmt.Printf("ID Time : %d\n", id.Time()) // Print out the ID's node number fmt.Printf("ID Node : %d\n", id.Node()) // Print out the ID's sequence number fmt.Printf("ID Step : %d\n", id.Step()) // Generate and print, all in one. fmt.Printf("ID : %d\n", node.Generate().Int64()) }
雪花id工具方法
package snowflakeutil import ( "coolnews.com/coolnews-service/global" "github.com/bwmarrin/snowflake" ) func GenSnowflakeId() int64 { node, err := snowflake.NewNode(1) if err != nil { global.Logger.Error("生成雪花id失敗") return 0 } // Generate a snowflake ID. id := node.Generate() return id.Int64() }
模型中使用
type CnsAppUser struct { models.BaseModel Username string `json:"username" gorm:"size:20;unique;not null;comment:使用者名稱"` Password string `json:"-" gorm:"size:100;not null;comment:密碼"` Phone string `json:"phone" gorm:"size:11;unique;not null;comment:手機號"` Avatar string `json:"avatar" gorm:"size:255;comment:頭像" json:"avatar"` Desc string `json:"desc" gorm:"size:50;comment:使用者簡介"` } func (c *CnsAppUser) BeforeCreate(scope *gorm.DB) error { c.Id = snowflakeutil.GenSnowflakeId() return nil }
會遇到一個int64的字串問題
json後加,string即可