見出し画像

golang UUIDの生成と注意点について

今回はgolangにおけるUUIDについてを解説していきます。

UUID

UUIDはUniversally Unique Identifierの略で、分散システムにおいてオブジェクトを一意に識別するために使用される128ビットの数です。

Go言語でUUIDを生成するためにはgithub.com/google/uuidパッケージを利用することが多いです。
このパッケージでは標準的なUUIDのフォーマットに従い、信頼性の高い方法でUUIDを生成することができます。


UUIDパッケージのインストール

UUIDを使うにはUUIDパッケージを以下のコマンドでインストールしてプロジェクトに追加します。

go get github.com/google/uuid


UUIDの生成

UUIDを生成するにはuuid.New()関数を呼び出すことで、ランダムに生成されたバージョン4のUUIDが返されます。

package main

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

func main() {
    id := uuid.New()
    fmt.Println(id.String())
}


UUIDのバージョン

github.com/google/uuidパッケージは、複数のUUIDバージョンの生成をサポートしています。

バージョン1 (時刻ベース)
バージョン2 (DCEセキュリティ)
バージョン3 (名前ベース、MD5ハッシュ)
バージョン4 (乱数)
バージョン5 (名前ベース、SHA-1ハッシュ)


golangの案件を探すならクラウドワークス テック

・97%がリモートのお仕事
・週4日、週3日OKのお仕事多数
・登録社数74万件業界トップクラス
・2〜4週間程度でお仕事決定
・案件提案から契約締結、勤怠管理もすべてオンライン完結
・継続率90%!一人ひとりをサポート
・参画後の評価で委託料が上がる認定パートナー制度
・簡単60秒で登録


注意点

バージョン選択

UUIDのバージョンによって生成方法が異なります。
バージョン1は現在の時刻とマシンのMACアドレスを元に生成されるため、生成されたUUIDから生成時の時刻やサーバーのMACアドレスが推測される可能性があります。セキュリティを重視する場合はランダム性に基づくバージョン4が推奨されます。


性能への影響

UUIDの生成はランダムネスを要求されるためアプリケーションのパフォーマンスに影響を与える可能性があります。
特に高頻度でUUIDを生成する場合はパフォーマンスへの影響を考慮する必要があります。


UUIDのユニーク性

UUIDは理論上はユニークであるとされていますが、極めて稀なケースとして衝突が発生する可能性がゼロではありません。
しかし、実用的にはこの確率は非常に低いため問題になることは少ないです。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?