萌えハッカーニュースリーダー

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

出典: https://github.com/sdrapkin/guid
博士
???

ロボ子、新しい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によるコンテンツを含み、ハルシネーションの可能性があります。

Search