程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了有没有办法用go语言生成UUID大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决有没有办法用go语言生成UUID?

开发过程中遇到有没有办法用go语言生成UUID的问题如何解决?下面主要结合日常开发的经验,给出你关于有没有办法用go语言生成UUID的解决方法建议,希望对你解决有没有办法用go语言生成UUID有所启发或帮助;
u[8] = (u[8] | 0x80) & 0xBF // what's the purpose ?
u[6] = (u[6] | 0x40) & 0x4F // what's the purpose ?

这些行将字节 6 和 8 的值限制在特定范围内。rand.Read返回 range 中的随机字节0-255,这些字节不是 UUID 的所有有效值。据我所知,这应该对切片中的所有值都进行。

如果您使用的是 linux,您也可以调用/usr/bin/uuIDgen.

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    out, err := exec.Command("uuIDgen").output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s", out)
}

其中产生:

$ go run uuID.go 
dc9076e9-2fda-4019-bd2c-900a8284b9c4

您可以使用go-uuid库生成 UUID 。这可以安装:

go get github.com/nu7hatch/gouuID

您可以使用以下命令生成随机(版本 4)UUID:

import "github.com/nu7hatch/gouuID"

...

u, err := uuID.NewV4()

返回的UUID类型是一个 16 字节的数组,因此您可以轻松检索二进制值。它还通过其String()方法提供标准的十六进制字符串表示。

您拥有的代码看起来也将生成一个有效的版本 4 UUID:您在最后执行的按位操作设置 UUID 的版本和变体字段以将其正确标识为版本 4。这样做是为了将随机 UUID 与通过其他算法生成的 UUID(例如,基于您的 MAC 地址和时间的版本 1 UUID)区分开来。

解决方法

我有如下代码:

u := make([]byte,16)
_,err := rand.Read(u)
if err != nil {
    return
}

u[8] = (u[8] | 0x80) & 0xBF // what does this do?
u[6] = (u[6] | 0x40) & 0x4F // what does this do?

return hex.EncodeToString(u)

它返回一个长度为 32 的字符串,但我认为它不是有效的 UUID。如果它是一个真正的UUID,为什么它是一个UUID,什么是代码,修改的值的目的u[8]u[6]

有没有更好的方法来生成 UUID?

大佬总结

以上是大佬教程为你收集整理的有没有办法用go语言生成UUID全部内容,希望文章能够帮你解决有没有办法用go语言生成UUID所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。