Golang雜談-gorm整合雪花id

Lastly發表於2024-08-19
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即可

相關文章