日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame唯一數(shù)-guid

?guid?提供了更簡便更高性能的唯一數(shù)生成功能。

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、海拉爾網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

?guid?模塊的設(shè)計(jì)目的在于提供一種使用更簡便、性能更高效且能滿足絕大多數(shù)業(yè)務(wù)場景的唯一數(shù)生成。?guid?的設(shè)計(jì)比較簡單,詳情可參考實(shí)現(xiàn)源碼。

使用方式:

import "github.com/GOgf/gf/v2/util/guid"

接口文檔:

https://pkg.go.dev/github.com/gogf/gf/v2/util/guid

基本介紹

?guid?通過?S?方法生成32字節(jié)的唯一數(shù),該方法定義如下:

func S(data ...[]byte) string

1、通過不帶任何參數(shù)的方式使用,該方法生成的唯一數(shù)將會有以下方式構(gòu)成:

?MAC(7) + PID(4) + TimestampNano(12) + Sequence(3) + RandomString(6) ?

其中:

  • ?MAC?表示當(dāng)前機(jī)器的?MAC?地址哈希值,由7個字節(jié)構(gòu)成;
  • ?PID?表示當(dāng)前機(jī)器的進(jìn)程?ID?哈希值,由4個字節(jié)構(gòu)成;
  • ?TimestampNano?表示當(dāng)前的納秒時間戳哈希值,由12個字節(jié)構(gòu)成;
  • ?Sequence?表示當(dāng)前進(jìn)程并發(fā)安全的序列號,由3個字節(jié)構(gòu)成;
  • ?RandomString?表示隨機(jī)數(shù),由6個字節(jié)構(gòu)成;

2、通過自定義任何參數(shù)的方式使用,該方法生成的唯一數(shù)將會有以下方式構(gòu)成:

?Data(7/14) + TimestampNano(12) + Sequence(3) + RandomString(3/10) ?

主要說明:

  • ?Data?表示自定義的參數(shù),參數(shù)類型為?[]byte?,最多支持2個參數(shù)輸入,由7或14個字節(jié)構(gòu)成;
  • 需要注意的是,輸入的自定義參數(shù)需要在業(yè)務(wù)上具有一定的唯一識別性,使得生成的唯一數(shù)更有價值;
  • 不管每一個?[]byte?參數(shù)長度為多少,最終都將通過哈希方式生成7個字節(jié)的哈希值。
  • ?TimestampNano?表示當(dāng)前的納秒時間戳哈希值,由12個字節(jié)構(gòu)成;
  • ?Sequence?表示當(dāng)前進(jìn)程并發(fā)安全的序列號,由3個字節(jié)構(gòu)成;
  • ?RandomString?表示隨機(jī)數(shù),由3或者10個字節(jié)構(gòu)成,即:
    • 如果給定1個自定義參數(shù),那么剩余的字節(jié)將會使用隨機(jī)數(shù)占位,長度為10個字節(jié);
    • 如果給定2個自定義參數(shù),那么剩余的字節(jié)將會使用隨機(jī)數(shù)占位,長度為3個字節(jié);

示例1,基本使用

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/util/guid"
)

func main() {
	fmt.Printf("TraceId: %s", guid.S())
}

執(zhí)行后,輸出結(jié)果為:

TraceId: oa9sdw03dk0c35q9bdwcnz42p00trwfr

示例2,自定義參數(shù)

我們的?SessionId?生成需要具有比較好的唯一性,且需要防止輕易的碰撞,因此可以使用以下方式:

func CreateSessionId(r *ghttp.Request) string {
    var (
        address = request.RemoteAddr
        header  = fmt.Sprintf("%v", request.Header)
    )
    return guid.S([]byte(address), []byte(header))
}

可以看到,?SessionId?需要依靠自定義的兩個輸入?yún)?shù)?RemoteAddr?, ?Header?來生成,這兩個參數(shù)在業(yè)務(wù)上具有一定的唯一識別性,且通過?guid.S?方法的設(shè)計(jì)構(gòu)成,生成的唯一數(shù)將會非常隨機(jī)且唯一,既滿足了業(yè)務(wù)需要也保證了安全。


網(wǎng)站名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame唯一數(shù)-guid
地址分享:http://m.5511xx.com/article/coeedec.html