UUID (Universally Unique Identifier) は、データ オブジェクトに一意の識別子を割り当てるために広く使用されています。 Go で UUID を生成するには、16 バイトの乱数の生成、UUID 仕様を満たすように結果の特定のビットを設定、結果を 16 進文字列としてエンコードするなど、いくつかの手順が必要です。
コードを詳しく見てみましょう。提供:
u := make([]byte, 16) _, err := rand.Read(u) if err != nil { return } u[8] = (u[8] | 0x80) & 0xBF // what does this do? u[6] = (u[6] | 0x40) & 0x4F // what does this do? return hex.EncodeToString(u)
あなたが提供したコードは、バージョン 4 の UUID を生成しようとしているようです。 u[8] = (u[8] | 0x80) & 0xBF 演算は、(0 ベースのインデックスの観点から) 9 バイト目の右から 4 番目のビットを 1 に設定しますが、u[6] = (u[6] | 0x40) & 0x4F 演算は、7 番目のバイトの右から 5 番目のビットを 1 に設定します。
これらの演算により、バイト 8 と6 は、UUID 仕様 (RFC 4122) で指定されているように、バージョン 4 UUID のバリアントおよびバージョン フィールドと一致します。
UUID を生成するより良い方法:
提供したコードは UUID の生成に使用できますが、これは推奨されるアプローチではありません。 Go でより堅牢かつ効率的な UUID 生成を行うには、Google の公式 UUID ライブラリ (https://github.com/google/uuid) を使用することをお勧めします。このライブラリを使用したコード サンプルは次のとおりです。
package main import ( "fmt" "github.com/google/uuid" ) func main() { id := uuid.New() // version 4 by default fmt.Println(id.String()) }
このアプローチは、UUID を生成するクリーンで標準化された方法を提供し、UUID 仕様への準拠を保証します。
以上がGo で UUID を生成する方法: `u[8] = (u[8] | 0x80) & 0xBF` および `u[6] = (u[6] | 0x40) & 0x4F` は何をしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。