PR

Go言語(Golang)1.27で標準ライブラリに「uuid」パッケージが追加!特徴や使い方についてご紹介!

2. 基礎

こんにちは。Tomoyuki(@tomoyuki65)です。

Go言語(Golang)のバージョン1.27では、ついに標準ライブラリに「uuid」パッケージが追加されました。

UUIDは実務のAPI開発でよく使われる一方、これまでは外部パッケージである「github.com/google/uuid」を利用するのが一般的でした。

それが今回、標準ライブラリだけで扱えるようになったため、外部パッケージに依存することなく、よりシンプルにUUIDを利用できるようになってます。

この記事では、そんな「uuid」パッケージの使い方についてご紹介します。

 

Go言語(Golang)1.27で標準ライブラリに「uuid」パッケージが追加!特徴や使い方についてご紹介!

UUIDとは?

UUID(Universally Unique Identifier)は、世界中で重複しないように生成される128ビットの識別子です。

データベースのIDやAPIのリソース識別子など、重複を避けたい場面で広く利用されています。

UUIDにはいくつかのバージョンがあり、生成方法や用途によって使い分けられます。

 

「uuid」パッケージの使い方

Go1.27でUUIDを利用したい場合、「uuid」パッケージをimportして利用します。

簡単な使い方の例としては以下の通りです。

package main

import (
    "fmt"
    "uuid"
)

func main() {
    id := uuid.New()

    fmt.Printf("id: %s\n", id)
    fmt.Printf("型: %T\n", id)
}

 

実行結果の例

id: d88c0911-ce6c-486a-8864-d84fa3beb878
型: uuid.UUID

※UUIDの型はstringではなく、「uuid.UUID」なので注意して下さい。基本的には「uuid.UUID」型のまま利用すべきですが、もし文字列として使う必要が出た場合は「id.String()」のようにStringメソッドで文字列化が可能です。

 

また、UUIDにはバージョンがあり、Go1.27では以下の2種類が使えます。

バージョン 特徴 主な用途
UUID v4 乱数をもとに生成されるUUID 一般的なID・識別子
UUID v7 タイムスタンプと乱数をもとに生成され、時系列で並べやすい データベースのIDなど

 

上記で利用した「New()」メソッドでは「UUID v4」が使われますが、バージョンを明示的に指定したい場合は「NewV4()」や「NewV7()」メソッドを利用します。

package main

import (
    "fmt"
    "uuid"
)

func main() {
    idV4 := uuid.NewV4()
    idV7 := uuid.NewV7()

    fmt.Printf("idV4: %s\n", idV4)
    fmt.Printf("idV7: %s\n", idV7)
}

 

実行結果の例

idV4: 9c4f0fba-e814-4141-9d02-5c5d612fec7d
idV7: 0124e053-3580-7000-8ce8-f06e729accae

 

UUIDバージョン一覧

バージョン 生成方法・特徴 時系列順 主な用途
UUID v1 タイムスタンプ + MACアドレスなど 古典的な時刻ベースID
UUID v2 v1をベースにしたDCE Security向け ほぼ使われない
UUID v3 名前 + MD5 同じ名前から常に同じUUIDを作る
UUID v4 完全ランダム 一般的なID・DBの主キー
UUID v5 名前 + SHA-1 v3と同じ用途。v3より安全性の高いハッシュ
UUID v6 v1の時刻部分を並び替え DBでソートしやすい時系列ID
UUID v7 Unix timestamp + ランダム値 現代的なWebサービスのID
UUID v8 独自仕様のカスタムUUID 独自要件がある場合

 

文字列から「uuid.UUID」に変換

文字列のUUIDを「uuid.UUID」に変換したい場合、「Parse()」メソッドを利用すると可能です。

package main

import (
    "fmt"
    "uuid"
)

func main() {
    idStr := "9c4f0fba-e814-4141-9d02-5c5d612fec7d"

    // 変換処理
    id, err := uuid.Parse(idStr)
    if err != nil {
        fmt.Printf("エラー:%v\n", err)
    } else {
        fmt.Printf("id: %s\n", id)
        fmt.Printf("型: %T\n", id)
    }
}

 

実行結果の例

id: 9c4f0fba-e814-4141-9d02-5c5d612fec7d
型: uuid.UUID

 

尚、テストコードなどで確実に変換できるような場合は、「MustParse()」メソッドを使うこともできます。(不正なUUIDの場合はpanicになるので注意)

package main

import (
    "fmt"
    "uuid"
)

func main() {
    idStr := "9c4f0fba-e814-4141-9d02-5c5d612fec7d"

    // 変換処理
    id := uuid.MustParse(idStr)

    fmt.Printf("id: %s\n", id)
    fmt.Printf("型: %T\n", id)
}

 

実行結果の例

id: 9c4f0fba-e814-4141-9d02-5c5d612fec7d
型: uuid.UUID

 

その他の使う可能性があるメソッド

メソッド 何をする? 戻り値 戻り値の例 戻り値の意味 主な用途
id.String() UUIDを文字列に変換 string "550e8400-e29b-41d4-a716-446655440000" ログ、URL、表示など
id.Compare(other) UUID同士を比較 int -1 / 0 / 1 -1: id < other
0: id == other
1: id > other
UUIDの大小比較、UUID v7での時系列順の比較など
uuid.Nil() Nil UUIDを取得 uuid.UUID 00000000-0000-0000-0000-000000000000 UUIDが未設定であることを表す

 

スポンサーリンク

最後に

今回はGo言語(Golang)バージョン1.27で標準ライブラリに追加された「uuid」パッケージの使い方についてご紹介しました。

既存のプロジェクトで利用していた外部パッケージ「github.com/google/uuid」を無理に置き換える必要はありませんが、Go1.27以降で新規開発するような場合は、標準ライブラリの「uuid」パッケージを利用するのが推薦です。

これからGo言語でUUIDを利用する場合は、ぜひ参考にしてみて下さい。

 

SubstackでITエンジニア向けニュースレター(メルマガ)を始めました!
こんにちは。Tomoyuki(@tomoyuki65)です。最近はどのSNSもアルゴリズム(どの投稿を誰に表示するかを決める仕組み)中心のタイムライン(投稿が流れてくる画面)になっていて、フォローしている人の投稿が見つけにくく、逆にフォロー...

 

この記事を書いた人
Tomoyuki

SE→ブロガーを経て、現在はSoftware Engineer(Web/Gopher)をしています!

Tomoyukiをフォローする
2. 基礎
スポンサーリンク
Tomoyukiをフォローする

コメント

タイトルとURLをコピーしました