m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

golangでUUIDの生成をライブラリでお試し

仕事でコード書くより

設計の仕事ばっかり、スケジュール管理とかめんどくさいので
他の人やってくんないかな…

UUIDって?

UUID(Universally Unique Identifier)とは、ソフトウェア上でオブジェクトを一意に識別するための識別子である。

*1

ざっくりいうとユニークIDみたいやつ
基本的にはsha1とかmd5とか乱数で生成していたけど
そういったものにフォーマットがついた感じ

例:3cc807ab-8e31-3071-aee4-f8f03781cb91

バージョン

現在1から5までの方法がある

確認用ライブラリ

https://github.com/google/uuid
今度改めて自身でアルゴリズムは検討するが今回はちょっとお試しでやってみる

ソース

package main

import (
    "github.com/google/uuid"
    "fmt"
)

func main() {
    fmt.Println("version1 NewUUID --")
    for i:=0;i<10;i++ {
        uuidObj, _ := uuid.NewUUID()
        fmt.Println("  ", uuidObj.String())
    }

    fmt.Println("version2 NewDCESecurity --")
    for i:=0;i<10;i++ {
        uuidObj, _ := uuid.NewUUID()
        domain := uuidObj.Domain()
        id := uuidObj.ID()

        uuidObj2, _ := uuid.NewDCESecurity(domain, id)
        fmt.Println("  ", uuidObj2.String())
    }

    fmt.Println("version3 NewMD5 --")
    for i:=0;i<10;i++ {
        uuidObj, _ := uuid.NewUUID()
        data := []byte("wnw8olzvmjp0x6j7ur8vafs4jltjabi0")
        uuidObj2 := uuid.NewMD5(uuidObj, data)
        fmt.Println("  ", uuidObj2.String())
    }

    fmt.Println("version5 NewSHA1 --")
    for i:=0;i<10;i++ {
        uuidObj, _ := uuid.NewUUID()
        data := []byte("wnw8olzvmjp0x6j7ur8vafs4jltjabi0")
        uuidObj2 := uuid.NewSHA1(uuidObj, data)
        fmt.Println("  ", uuidObj2.String())
    }

    fmt.Println("version4 NewRandom --")
    for i:=0;i<10;i++ {
        uuidObj, _ := uuid.NewRandom()
        fmt.Println("  ", uuidObj.String())
    }

}

結果

mshige1979MBA:golang matsumotoshigeharu$ go run sample1.go
version1 NewUUID --
   ef45b54c-9f70-11e9-a730-6476baad914e
   ef45c294-9f70-11e9-a730-6476baad914e
   ef45c2b2-9f70-11e9-a730-6476baad914e
   ef45c2c6-9f70-11e9-a730-6476baad914e
   ef45c2e4-9f70-11e9-a730-6476baad914e
   ef45c2f8-9f70-11e9-a730-6476baad914e
   ef45c316-9f70-11e9-a730-6476baad914e
   ef45c334-9f70-11e9-a730-6476baad914e
   ef45c352-9f70-11e9-a730-6476baad914e
   ef45c366-9f70-11e9-a730-6476baad914e
version2 NewDCESecurity --
   ef45c38e-9f70-21e9-a730-6476baad914e
   ef45c3ac-9f70-21e9-a730-6476baad914e
   ef45c3ca-9f70-21e9-a731-6476baad914e
   ef45c3e8-9f70-21e9-a732-6476baad914e
   ef45c410-9f70-21e9-a732-6476baad914e
   ef45c442-9f70-21e9-a732-6476baad914e
   ef45c46a-9f70-21e9-a733-6476baad914e
   ef45c49c-9f70-21e9-a733-6476baad914e
   ef45c4c4-9f70-21e9-a734-6476baad914e
   ef45c4ec-9f70-21e9-a735-6476baad914e
version3 NewMD5 --
   3cc807ab-8e31-3071-aee4-f8f03781cb91
   7e7e001e-6957-38d5-b035-41926dd035dd
   91d52425-9470-3e2b-8e5f-649b7b4ec795
   157ffb9e-d6b2-3b99-9fca-1d347f60b3e3
   33b0480d-6d5f-358a-a37a-893e5850fa62
   4b41d96b-dd72-3314-9cc2-1ab241eacb30
   9337ce23-6909-3137-98d2-a9372bf57692
   1e15f3d0-a040-3eca-a8bc-c677bc8bc619
   b90f3b5d-059c-3c0e-b3d8-85c577763bf6
   f741b68d-a9d2-3396-b499-745920a718ff
version5 NewSHA1 --
   13f575fa-02d7-5c38-8e66-48524dd233a4
   a56079b2-5373-5656-911a-483e3a92f19c
   18c2d54b-1a94-5928-8a4a-2f3dd5fc3e57
   8ac4f8a2-89b8-5ea3-81eb-d1654deaab51
   bb6bff8b-615f-5791-a9fb-e3543fd9d02e
   8209f28f-ccc9-5a90-beaf-d7e8e9927183
   387ab566-8b80-5c6c-a156-8e49a5c9c3fe
   75a4de2d-8049-5bb1-80c9-7250959af3d2
   5991cc2e-2bac-5f83-9ae0-b4a45882a11a
   b8e33f96-449d-5972-8c9c-98b0487549dd
version4 NewRandom --
   01a2c8b4-e3ec-4df5-a027-b7ffe5c6ed5d
   eb2aa249-3614-4833-b979-99c87c4189a8
   4c8bda02-4b27-460a-b46f-d65b4e4f5e48
   23df6b4c-e10f-4bcd-b935-0224f3216680
   2ab1a839-08b2-4069-9bd7-a772c5934e66
   dab1ade8-a446-4609-844b-257a7ab1ba0b
   eb770f37-a59a-4888-9789-d585f514ae93
   b9999fdb-cd20-4bdb-b671-6228667a6746
   8160d492-1ead-4d33-b4e8-d242cf2df332
   63b96ec6-e9d7-4fa4-abb7-31b9e12fca0d

*1:出典: フリー百科事典『ウィキペディアWikipedia)』