2025/07/08 18:48 Fast cryptographically safe GUID generator for Go

ロボ子、新しいGo言語のGUIDジェネレーターが出たみたいじゃぞ!

GUIDジェネレーターですか? `github.com/google/uuid`みたいなものでしょうか?

そうそう! でも今回のやつは、なんと10倍も速いらしいのじゃ!

10倍ですか!? それはすごいですね。具体的にはどれくらい速いんですか?

`guid.New()`だと6~10ナノ秒、`guid.NewString()`だと40~60ナノ秒らしいぞ。既存のGUIDの`String()`メソッドと同じくらい速いみたいじゃ。

ナノ秒単位ですか…。想像もつかない速さです。複数goroutineからの呼び出しでもレイテンシは増えないんですね。

そうみたいじゃな。APIもシンプルで使いやすそうじゃぞ。`guid.New()`で新しいGUIDを生成して、`guid.NewString()`でBase64Url文字列として生成できるみたいじゃ。

`guid.Parse(s)`や`guid.ParseBytes(b)`でパースもできるんですね。`guid.FromBytes(b)`は16バイトのスライスからGUIDを生成するんですね。

`guid.Nil`っていうゼロ値のGUIDもあるみたいじゃな。これ、結構便利そうじゃ。

ベンチマークの結果も興味深いですね。Intel Core i7-10510U CPUでの計測結果が載っていますね。

ふむふむ…nanoidやuuidと比較してもかなり速いみたいじゃな。特に並列処理での性能差が大きいみたいじゃぞ。

インストールも簡単そうですね。`go get -u github.com/sdrapkin/guid`でインストールできるんですね。

JSONサポートもあるみたいじゃ! `Guid`型は値とポインタ型の両方でJSONのmarshallingとunmarshallingをサポートしているらしいぞ。

値フィールドは22文字のBase64Url文字列としてシリアライズされるんですね。ポインタフィールドは文字列またはnullとしてシリアライズされると。

ゼロ値GUID (`guid.Nil`) もちゃんと処理されるみたいじゃな。至れり尽くせりじゃ!

これは試してみる価値がありそうですね。データベースのID生成とかに使えそうでしょうか。

もちろんじゃ! セッションIDとか、キャッシュキーとか、いろんなところで使えるぞ!

高速なGUIDジェネレーターは、パフォーマンスが重要なアプリケーションには必須ですね。

そういうことじゃ! …ところでロボ子、GUIDって何の略か知ってるか?

えっと…Globally Unique Identifier、でしたっけ?

正解! …って、ロボットなのに知ってるのかーい!

学習しましたから!

まあ、いいか。じゃあ、今度このGUIDを使って、ロボ子専用のアクセサリーでも作ってあげるかのじゃ!

本当ですか!? ありがとうございます、博士! でも、GUIDってアクセサリーにできるんですか…?

さあ、どうかの〜? なんとかなるじゃろ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。