guid
使用方式:
接口文档:
https://godoc.org/github.com/gogf/gf/util/guid
func S(data ...[]byte) string
通过不带任何参数的方式使用,该方法生成的唯一数将会有以下方式构成:
MAC(7) + PID(4) + TimestampNano(12) + Sequence(3) + RandomString(6)
其中:
MAC
表示当前机器的MAC
地址哈希值,由7
个字节构成;PID
表示当前机器的进程ID哈希值,由4
个字节构成;TimestampNano
表示当前的纳秒时间戳哈希值,由12
个字节构成;Sequence
表示当前进程并发安全的序列号,由3
个字节构成;RandomString
表示随机数,由6
个字节构成;
package main
import (
"github.com/gogf/gf/util/guid"
)
func main() {
fmt.Printf("TraceId: %s", guid.S())
}
执行后,输出结果为:
我们的SessionId
生成需要具有比较好的唯一性,且需要防止轻易的碰撞,因此可以使用以下方式:
func CreateSessionId(r *ghttp.Request) string {
var (
address = request.RemoteAddr
header = fmt.Sprintf("%v", request.Header)
)
}
可以看到,SessionId
需要依靠自定义的两个输入参数RemoteAddr
, Header
来生成,这两个参数在业务上具有一定的唯一识别性,且通过方法的设计构成,生成的唯一数将会非常随机且唯一,既满足了业务需要也保证了安全。