こんにちは。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を利用する場合は、ぜひ参考にしてみて下さい。



コメント