最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GoLang中生成UUID唯一標識的實現(xiàn)

 更新時間:2021年05月08日 14:33:22   作者:私念  
這篇文章主要介紹了GoLang中生成UUID唯一標識的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1、什么是UUID

UUID簡介

通用唯一識別碼(英語:Universally Unique Identifier,簡稱UUID)是一種軟件建構(gòu)的標準,亦為自由軟件基金會組織在分散式計算環(huán)境領(lǐng)域的一部份。

UUID的目的,是讓分散式系統(tǒng)中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。

如此一來,每個人都可以創(chuàng)建不與其它人沖突的UUID。

在這樣的情況下,就不需考慮數(shù)據(jù)庫創(chuàng)建時的名稱重復(fù)問題。目前最廣泛應(yīng)用的UUID,是微軟公司的全局唯一標識符(GUID),而其他重要的應(yīng)用,則有Linux ext2/ext3文件系統(tǒng)、LUKS加密分區(qū)、GNOME、KDE、Mac OS X等等。

2、Go中現(xiàn)有的UUID第三方生成辦法

目前,golang中的uuid還沒有納入標準庫,我們使用github上的開源庫:

go get -u github.com/satori/go.uuid

使用:

package main 
import (
    "fmt"
    "github.com/satori/go.uuid"
)
 
func main() {
   id := uuid.NewV4()
   ids := id.String()
}

3、自定義的 UUIDGenerator實現(xiàn)

功能:

UUIDGenerator 可以生成全局唯一的字符串形式的ID,ID由兩部分構(gòu)成,一部分是用戶指定的前綴,另一部分是數(shù)字,數(shù)字的最大值為 4294967295;

UUIDGenerator 可以生成全局唯一的無符號整形數(shù)字,數(shù)字范圍 0- 4294967295

代碼

package utils 
import "fmt"
 
const (
    MAXUINT32 = 4294967295
    DEFAULT_UUID_CNT_CACHE = 512
)
 
type UUIDGenerator struct {
    Prefix       string
    idGen        uint32
    internalChan chan uint32
}
 
func NewUUIDGenerator(prefix string) *UUIDGenerator {
    gen := &UUIDGenerator{
        Prefix:       prefix,
        idGen:        0,
        internalChan: make(chan uint32, DEFAULT_UUID_CNT_CACHE),
    }
    gen.startGen()
    return gen
}
 
//開啟 goroutine, 把生成的數(shù)字形式的UUID放入緩沖管道
func (this *UUIDGenerator) startGen() {
    go func() {
        for {
            if this.idGen == MAXUINT32 {
                this.idGen = 1
            } else {
                this.idGen += 1
            }
            this.internalChan <- this.idGen
        }
    }()
}
 
//獲取帶前綴的字符串形式的UUID
func (this *UUIDGenerator) Get() string {
    idgen := <-this.internalChan
    return fmt.Sprintf("%s%d", this.Prefix, idgen)
}
 
//獲取uint32形式的UUID
func (this *UUIDGenerator) GetUint32() uint32 {
    return <-this.internalChan
}

測試用例:

package utils 
import (
    "testing"
    "fmt"
)
 
func TestUUIDGenerator(t *testing.T) {
    //新建UUIDGennerator
    UUIDFactory := NewUUIDGenerator("idtest")
 
    //獲取UUID
    for i:= 0; i < 50; i++{
        fmt.Println(UUIDFactory.Get())
    }
 
    //獲取uint32 形式的UUID
    for i := 0; i < 50; i++{
        fmt.Println(UUIDFactory.GetUint32())
    }
}

結(jié)果

idtest1

idtest2

idtest3

idtest4

idtest5

6

7

8

9

10

PASS

補充:golang 的 UUID 使用

安裝

go get github.com/satori/go.uuid

使用

幾種 UUID 的產(chǎn)生方式:

Version 1, based on timestamp and MAC address (RFC 4122)
Version 2, based on timestamp, MAC address and POSIX UID/GID (DCE 1.1)
Version 3, based on MD5 hashing (RFC 4122)
Version 4, based on random numbers (RFC 4122)
Version 5, based on SHA-1 hashing (RFC 4122)

示例代碼:

package main
import (
    "fmt"
    "github.com/satori/go.uuid"
)
func main() {
    // Creating UUID Version 4
    // panic on error
    u1 := uuid.Must(uuid.NewV4())
    fmt.Printf("UUIDv4: %s\n", u1)
    // or error handling
    u2, err := uuid.NewV4()
    if err != nil {
        fmt.Printf("Something went wrong: %s", err)
        return
    }
    fmt.Printf("UUIDv4: %s\n", u2)
    // Parsing UUID from string input
    u2, err := uuid.FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
    if err != nil {
        fmt.Printf("Something went wrong: %s", err)
    }
    fmt.Printf("Successfully parsed: %s", u2)
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • golang mapstructure庫的具體使用

    golang mapstructure庫的具體使用

    mapstructure用于將通用的map[string]interface{}解碼到對應(yīng)的 Go 結(jié)構(gòu)體中,或者執(zhí)行相反的操作,本文主要介紹了golang mapstructure庫的具體使用,感興趣的可以了解一下
    2023-09-09
  • 淺析go中的map數(shù)據(jù)結(jié)構(gòu)字典

    淺析go中的map數(shù)據(jù)結(jié)構(gòu)字典

    golang中的map是一種數(shù)據(jù)類型,將鍵與值綁定到一起,底層是用哈希表實現(xiàn)的,可以快速的通過鍵找到對應(yīng)的值。這篇文章主要介紹了go中的數(shù)據(jù)結(jié)構(gòu)字典-map,需要的朋友可以參考下
    2019-11-11
  • Go語言開發(fā)k8s之Service操作解析

    Go語言開發(fā)k8s之Service操作解析

    這篇文章主要為大家介紹了Go語言開發(fā)k8s之Service操作解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 淺析Go匯編語法和MatrixOne使用介紹

    淺析Go匯編語法和MatrixOne使用介紹

    MatrixOne由Go語言所開發(fā)是一個新一代超融合異構(gòu)數(shù)據(jù)庫,致力于打造單一架構(gòu)處理TP、AP、流計算等多種負載的極簡大數(shù)據(jù)引擎,今天通過本文給大家介紹Go匯編語法和MatrixOne使用,感興趣的朋友一起看看吧
    2022-04-04
  • 利用Go語言開發(fā)文件操作工具輕松處理所有文件

    利用Go語言開發(fā)文件操作工具輕松處理所有文件

    在后端開發(fā)中,文件操作是一個非常常見但又容易出錯的場景,本文小編要向大家介紹一個強大的 Go 語言文件操作工具庫,它能幫你輕松處理各種文件操作場景
    2025-03-03
  • Go?json自定義Unmarshal避免判斷nil示例詳解

    Go?json自定義Unmarshal避免判斷nil示例詳解

    這篇文章主要為大家介紹了Go?json自定義Unmarshal避免判斷nil示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go local history本地歷史恢復(fù)代碼神器

    go local history本地歷史恢復(fù)代碼神器

    這篇文章主要為大家介紹了go local history本地歷史恢復(fù)代碼神器的使用功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • golang結(jié)合mysql設(shè)置最大連接數(shù)和最大空閑連接數(shù)

    golang結(jié)合mysql設(shè)置最大連接數(shù)和最大空閑連接數(shù)

    本文介紹golang?中連接MySQL時,如何設(shè)置最大連接數(shù)和最大空閑連接數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • golang中struct和interface的基礎(chǔ)使用教程

    golang中struct和interface的基礎(chǔ)使用教程

    Go不同于一般的面向?qū)ο笳Z言,需要我們好好的學習研究,下面這篇文章主要給大家介紹了關(guān)于golang中struct和interface的基礎(chǔ)使用的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2018-03-03
  • go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換)

    go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換)

    這篇文章主要介紹了go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

花莲市| 亳州市| 林甸县| 新兴县| 郓城县| 婺源县| 嵊州市| 子洲县| 彩票| 北票市| 灵石县| 黑河市| 绥芬河市| 荣成市| 灵璧县| 永年县| 大宁县| 新民市| 哈尔滨市| 化隆| 巴林左旗| 子洲县| 利津县| 宁波市| 达日县| 汤阴县| 桐乡市| 习水县| 伊金霍洛旗| 达州市| 昌都县| 新安县| 新源县| 自治县| 文昌市| 左云县| 安远县| 荥经县| 洛南县| 台中县| 连平县|