英文:
How can I get 2 long numbers from a uuid?
问题
你可以使用以下方法从生成的 UUID 中获取两个长整型数:
- 将生成的 UUID 转换为字符串形式。
- 使用字符串分割函数将 UUID 字符串分割为两部分。
- 将每个部分转换为长整型数。
以下是一个示例代码片段,演示如何实现这一过程:
package main
import (
"fmt"
"strings"
"github.com/satori/go.uuid"
)
func main() {
// 生成 UUID
uuid := uuid.NewV4()
// 将 UUID 转换为字符串
uuidStr := uuid.String()
// 使用字符串分割函数将 UUID 字符串分割为两部分
parts := strings.Split(uuidStr, "-")
// 将每个部分转换为长整型数
part1 := convertToLongInt(parts[0])
part2 := convertToLongInt(parts[1])
fmt.Println(part1, part2)
}
func convertToLongInt(str string) int64 {
var result int64
_, err := fmt.Sscanf(str, "%x", &result)
if err != nil {
// 错误处理
}
return result
}
请注意,此示例假设您已经安装了 github.com/satori/go.uuid
库,并且已经导入了所需的包。
英文:
I'm using this library to generate a v4 uuid:
https://github.com/satori/go.uuid
What is the most efficient way to get 2 long ints from the generated uuid?
答案1
得分: 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)
}
英文:
You can use the Bytes()
function to get the bytes and then convert to a long with encoding/binary
. As @icza mentioned, you can also slice the UUID object directly, so you don't even need to call 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)
}
答案2
得分: 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
英文:
For example,
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)
}
Output:
eb33dcfa-e439-4ff9-b366-bcd397e0852f
eb33dcfae4394ff9 b366bcd397e0852f
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论