2016-02-01 21 views

回答

3

您可以使用Bytes()函数获取字节,然后使用encoding/binary转换为长整型。正如@icza提到的,你也可以直接切片UUID对象,所以你甚至不需要拨打Bytes()

package main 

import "fmt" 
import "encoding/binary" 
import "github.com/satori/go.uuid" 

func main() { 
    u1 := uuid.NewV4() 
    fmt.Printf("UUIDv4: %s\n", u1) 

    l1 := binary.BigEndian.Uint64(u1[:8]) 
    l2 := binary.BigEndian.Uint64(u1[8:]) 

    fmt.Printf("%x %x\n", l1, l2) 
    fmt.Printf("%v %v\n", l1, l2) 
} 
+4

['UUID'](https://godoc.org/github.com/satori/go.uuid#UUID)是'[16] byte'',所以你可以简单地对其进行分片。例如。而不是'u1.Bytes()[:8]'use'u1 [:8]'。 – icza

+0

这很酷。谢谢,我已经更新了答案。 – kichik

1

例如,

package main 

import (
    "encoding/binary" 
    "fmt" 

    "github.com/satori/go.uuid" 
) 

func main() { 
    u := uuid.NewV4() 
    fmt.Printf("%s\n", u) 
    u1 := binary.BigEndian.Uint64(u[0:8]) 
    u2 := binary.BigEndian.Uint64(u[8:16]) 
    fmt.Printf("%x %x\n", u1, u2) 
} 

输出:

eb33dcfa-e439-4ff9-b366-bcd397e0852f 
eb33dcfae4394ff9 b366bcd397e0852f