听诗静雨 發表於 2023-3-24 14:51:00

【go】uuid简介

<p>通用唯一识别码(英语:universally unique identifier,简称uuid)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。<br>uuid的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。<br>如此一来,每个人都可以创建不与其它人冲突的uuid。<br>在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的uuid,是微软公司的全局唯一标识符(guid),而其他重要的应用,则有linux ext2/ext3文件系统、luks加密分区、gnome、kde、mac os x等等。</p>
<p>目前,golang中并没有uuid的标准库,所以需要借助第三方库。<br>下面介绍几个用的比较多的uuid第三方库</p>
<h2><strong>github.com/google/uuid</strong></h2>
<p><strong>谷歌出品的go语言uuid库<code>github.com/google/uuid</code></strong></p>
<p>&nbsp;</p>
<h2 id="生成纯数字类型uuid">生成纯数字类型uuid</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/google/uuid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)

</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    u1 :</span>=<span style="color: rgba(0, 0, 0, 1)"> uuid.New()
    u2, _ :</span>=<span style="color: rgba(0, 0, 0, 1)"> uuid.NewRandom()
    fmt.Println(u1.ID())
    fmt.Println(u2.ID())
}

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> -- 输出 --
3507369127
1284741309
</span><span style="color: rgba(0, 128, 0, 1)">*/</span></pre>
</div>
<h2 id="生成字符串类型uuid">生成字符串类型uuid</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/google/uuid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)

</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    u1 :</span>=<span style="color: rgba(0, 0, 0, 1)"> uuid.New()
    u2, _ :</span>=<span style="color: rgba(0, 0, 0, 1)"> uuid.NewRandom()
    fmt.Println(u1.String())
    fmt.Println(u2.String())
}

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> -- 输出 --
494e09ff-29ec-426a-a3a1-362078085557
8451e91a-4251-4cb8-ac82-6bd1fb684a61
</span><span style="color: rgba(0, 128, 0, 1)">*/</span></pre>
</div>
<h1 id="githubcomsatorigouuid">github.com/satori/go.uuid</h1>
<p>GitHub上还有一个uuid库<code>github.com/satori/go.uuid</code>,但是只能生成字符串类型的uuid。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/satori/go.uuid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)

</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    u1 :</span>=<span style="color: rgba(0, 0, 0, 1)"> uuid.NewV4()
    fmt.Println(u1.String())
}

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> -- 输出 --
36a657b9-f529-4037-b6f7-9a1cb8060996
</span><span style="color: rgba(0, 128, 0, 1)">*/</span></pre>
</div>
<h1>github.com/rs/xid</h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/rs/xid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)



</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    id :</span>=<span style="color: rgba(0, 0, 0, 1)"> xid.New()
    fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/rs/xid:         %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id.String())
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/rs/xid:         cdoup9qma9lh444rnjsg</span></pre>
</div>
<h1 id="githubcomkjkbetterguid">github.com/kjk/betterguid</h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/segmentio/ksuid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)

</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    id :</span>=<span style="color: rgba(0, 0, 0, 1)"> ksuid.New()
    fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/segmentio/ksuid:%s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id.String())
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/segmentio/ksuid:2HWp8gYl9YD2e1mWN4wt3M0xFW0</span></pre>
</div>
<h1>github.com/kjk/betterguid</h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>
   
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/kjk/betterguid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)

</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    id :</span>=<span style="color: rgba(0, 0, 0, 1)"> betterguid.New()
    fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/kjk/betterguid:   %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id)
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/kjk/betterguid:   -NGp05ol0KJTby4X5oda</span></pre>
</div>
<h1 id="githubcomoklogulid">github.com/oklog/ulid</h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">math/rand</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">time</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/oklog/ulid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)


</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    t :</span>=<span style="color: rgba(0, 0, 0, 1)"> time.Now().UTC()
    entropy :</span>=<span style="color: rgba(0, 0, 0, 1)"> rand.New(rand.NewSource(t.UnixNano()))
    id :</span>=<span style="color: rgba(0, 0, 0, 1)"> ulid.MustNew(ulid.Timestamp(t), entropy)
    fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/oklog/ulid:       %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id.String())
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/oklog/ulid:       01GHTG8V9HC9NJPFGGZB9RV4M9</span></pre>
</div>
<h1>github.com/sony/sonyflake</h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/sony/sonyflake</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)


</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
    flake :</span>=<span style="color: rgba(0, 0, 0, 1)"> sonyflake.NewSonyflake(sonyflake.Settings{})
    id, err :</span>=<span style="color: rgba(0, 0, 0, 1)"> flake.NextID()
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> err !=<span style="color: rgba(0, 0, 0, 1)"> nil {
      fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">flake.NextID() failed with %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, err)
    }
    fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/sony/sonyflake:   %x\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id)
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/sony/sonyflake:   6070cf552000bc8</span></pre>
</div>
<h1>github.com/chilts/sid</h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main

</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>

    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/chilts/sid</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)



</span><span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> genSid() {
    id :</span>=<span style="color: rgba(0, 0, 0, 1)"> sid.Id()
    fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/chilts/sid:       %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id)
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/chilts/sid:       1668410535227050000-0834787600488830456</span></pre>
</div>
<p>【参考链接】</p>
<h1 class="postTitle"><span>GO生成UUID</span></h1>
<div class="clear"><strong><span style="font-size: 18px">&nbsp;go多种uuid生成方式</span></strong></div>
<div class="postBody">&nbsp;</div><br><br>
来源:https://www.cnblogs.com/opensmarty/p/17251703.html
頁: [1]
查看完整版本: 【go】uuid简介