W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
?guid
?提供了更簡(jiǎn)便更高性能的唯一數(shù)生成功能。
?guid
?模塊的設(shè)計(jì)目的在于提供一種使用更簡(jiǎn)便、性能更高效且能滿足絕大多數(shù)業(yè)務(wù)場(chǎng)景的唯一數(shù)生成。?guid
?的設(shè)計(jì)比較簡(jiǎn)單,詳情可參考實(shí)現(xiàn)源碼。
使用方式:
import "github.com/gogf/gf/v2/util/guid"
接口文檔:
https://pkg.go.dev/github.com/gogf/gf/v2/util/guid
?guid
?通過(guò)?S
?方法生成32字節(jié)的唯一數(shù),該方法定義如下:
func S(data ...[]byte) string
1、通過(guò)不帶任何參數(shù)的方式使用,該方法生成的唯一數(shù)將會(huì)有以下方式構(gòu)成:
?MAC(7) + PID(4) + TimestampNano(12) + Sequence(3) + RandomString(6)
?
其中:
MAC
?表示當(dāng)前機(jī)器的?MAC
?地址哈希值,由7個(gè)字節(jié)構(gòu)成;PID
?表示當(dāng)前機(jī)器的進(jìn)程?ID
?哈希值,由4個(gè)字節(jié)構(gòu)成;TimestampNano
?表示當(dāng)前的納秒時(shí)間戳哈希值,由12個(gè)字節(jié)構(gòu)成;Sequence
?表示當(dāng)前進(jìn)程并發(fā)安全的序列號(hào),由3個(gè)字節(jié)構(gòu)成;RandomString
?表示隨機(jī)數(shù),由6個(gè)字節(jié)構(gòu)成;2、通過(guò)自定義任何參數(shù)的方式使用,該方法生成的唯一數(shù)將會(huì)有以下方式構(gòu)成:
?Data(7/14) + TimestampNano(12) + Sequence(3) + RandomString(3/10)
?
主要說(shuō)明:
Data
?表示自定義的參數(shù),參數(shù)類型為?[]byte
?,最多支持2個(gè)參數(shù)輸入,由7或14個(gè)字節(jié)構(gòu)成;[]byte
?參數(shù)長(zhǎng)度為多少,最終都將通過(guò)哈希方式生成7個(gè)字節(jié)的哈希值。TimestampNano
?表示當(dāng)前的納秒時(shí)間戳哈希值,由12個(gè)字節(jié)構(gòu)成;Sequence
?表示當(dāng)前進(jìn)程并發(fā)安全的序列號(hào),由3個(gè)字節(jié)構(gòu)成;RandomString
?表示隨機(jī)數(shù),由3或者10個(gè)字節(jié)構(gòu)成,即:package main
import (
"fmt"
"github.com/gogf/gf/v2/util/guid"
)
func main() {
fmt.Printf("TraceId: %s", guid.S())
}
執(zhí)行后,輸出結(jié)果為:
TraceId: oa9sdw03dk0c35q9bdwcnz42p00trwfr
我們的?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
?需要依靠自定義的兩個(gè)輸入?yún)?shù)?RemoteAddr
?, ?Header
?來(lái)生成,這兩個(gè)參數(shù)在業(yè)務(wù)上具有一定的唯一識(shí)別性,且通過(guò)?guid.S
?方法的設(shè)計(jì)構(gòu)成,生成的唯一數(shù)將會(huì)非常隨機(jī)且唯一,既滿足了業(yè)務(wù)需要也保證了安全。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: