Rumah >pembangunan bahagian belakang >Golang >Cara Menjana UUID dalam Go: Apa yang `u[8] = (u[8] | 0x80) & 0xBF` dan `u[6] = (u[6] | 0x40) & 0x4F` Lakukan?

Cara Menjana UUID dalam Go: Apa yang `u[8] = (u[8] | 0x80) & 0xBF` dan `u[6] = (u[6] | 0x40) & 0x4F` Lakukan?

DDD
DDDasal
2024-12-15 04:41:13222semak imbas

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

Penjanaan UUID dalam Go

UUID (Pengecam Unik Sejagat) digunakan secara meluas untuk menetapkan pengecam unik kepada objek data. Menjana UUID dalam Go melibatkan beberapa langkah, termasuk menjana nombor rawak 16 bait, menetapkan bit tertentu dalam hasil untuk memenuhi spesifikasi UUID dan mengekodkan hasilnya sebagai rentetan perenambelasan.

Mari kita mendalami kod yang anda disediakan:

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)

Kod yang anda berikan nampaknya adalah percubaan untuk menjana UUID versi 4. Operasi u[8] = (u[8] | 0x80) & 0xBF menetapkan bit keempat dari kanan bait ke-9 (dari perspektif indeks berasaskan 0) kepada 1 manakala u[6] = (u[6] |. 0x40) & operasi 0x4F menetapkan bit kelima dari kanan bait ke-7 kepada 1.

Operasi ini memastikan bahawa bait 8 dan 6 sepadan dengan medan varian dan versi bagi UUID versi 4, seperti yang dinyatakan dalam spesifikasi UUID (RFC 4122).

A Cara Lebih Baik untuk Menjana UUID:

Sementara kod yang anda berikan boleh digunakan untuk menjana UUID, ini bukan pendekatan yang disyorkan. Untuk penjanaan UUID yang lebih mantap dan cekap dalam Go, adalah disyorkan untuk menggunakan perpustakaan UUID rasmi daripada Google: https://github.com/google/uuid. Berikut ialah contoh kod menggunakan perpustakaan ini:

package main

import (
    "fmt"

    "github.com/google/uuid"
)

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

Pendekatan ini menyediakan cara yang bersih dan standard untuk menjana UUID, memastikan pematuhan dengan spesifikasi UUID.

Atas ialah kandungan terperinci Cara Menjana UUID dalam Go: Apa yang `u[8] = (u[8] | 0x80) & 0xBF` dan `u[6] = (u[6] | 0x40) & 0x4F` Lakukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn