Maison >développement back-end >Golang >Comment générer des UUID dans Go : que font `u[8] = (u[8] | 0x80) & 0xBF` et `u[6] = (u[6] | 0x40) & 0x4F` ?

Comment générer des UUID dans Go : que font `u[8] = (u[8] | 0x80) & 0xBF` et `u[6] = (u[6] | 0x40) & 0x4F` ?

DDD
DDDoriginal
2024-12-15 04:41:13226parcourir

How to Generate UUIDs in Go: What Do `u[8] = (u[8] | 0x80) & 0xBF` and `u[6] = (u[6] | 0x40) & 0x4F` Do?

Génération d'UUID dans Go

Les UUID (Universally Unique Identifiers) sont largement utilisés pour attribuer des identifiants uniques aux objets de données. La génération d'UUID dans Go implique plusieurs étapes, notamment la génération d'un nombre aléatoire de 16 octets, la définition de bits spécifiques dans le résultat pour répondre à la spécification UUID et le codage du résultat sous forme de chaîne hexadécimale.

Plongeons dans le code que vous fourni :

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)

Le code que vous avez fourni semble être une tentative de génération d'un UUID version 4. L'opération u[8] = (u[8] | 0x80) & 0xBF définit le quatrième bit à droite du 9ème octet (du point de vue de l'index basé sur 0) à 1 tandis que l'opération u[6] = (u[6] | 0x40) & 0x4F définit le cinquième bit à droite du 7ème octet à 1.

Ces opérations garantissent que les octets 8 et 6 faire correspondre les champs de variante et de version d'un UUID version 4, comme spécifié dans la spécification UUID (RFC 4122).

Une meilleure façon de générer des UUID :

Alors que le le code que vous avez fourni peut être utilisé pour générer des UUID, ce n'est pas l'approche recommandée. Pour une génération d'UUID plus robuste et efficace dans Go, il est recommandé d'utiliser la bibliothèque UUID officielle de Google : https://github.com/google/uuid. Voici un exemple de code utilisant cette bibliothèque :

package main

import (
    "fmt"

    "github.com/google/uuid"
)

func main() {
    id := uuid.New()  // version 4 by default
    fmt.Println(id.String())
}

Cette approche fournit un moyen propre et standardisé de générer des UUID, garantissant la conformité à la spécification UUID.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn