guid

    使用方式

    接口文档

    https://godoc.org/github.com/gogf/gf/util/guid

    1. func S(data ...[]byte) string
    1. 通过不带任何参数的方式使用,该方法生成的唯一数将会有以下方式构成:

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

      其中:

      • MAC表示当前机器的MAC地址哈希值,由7个字节构成;
      • PID表示当前机器的进程ID哈希值,由4个字节构成;
      • TimestampNano表示当前的纳秒时间戳哈希值,由12个字节构成;
      • Sequence表示当前进程并发安全的序列号,由3个字节构成;
      • RandomString表示随机数,由6个字节构成;
    1. package main
    2. import (
    3. "github.com/gogf/gf/util/guid"
    4. )
    5. func main() {
    6. fmt.Printf("TraceId: %s", guid.S())
    7. }

    执行后,输出结果为:

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

    1. func CreateSessionId(r *ghttp.Request) string {
    2. var (
    3. address = request.RemoteAddr
    4. header = fmt.Sprintf("%v", request.Header)
    5. )
    6. }

    可以看到,SessionId需要依靠自定义的两个输入参数RemoteAddr, Header来生成,这两个参数在业务上具有一定的唯一识别性,且通过方法的设计构成,生成的唯一数将会非常随机且唯一,既满足了业务需要也保证了安全。