Go:在内存中有效地存储十六进制值

时间:2014-06-17 13:31:26

标签: go hex storage

我有两个16字节的十六进制值,它们彼此相关,我想在Go中保留在内存中(因此它们只需要在运行过程的生命周期中存在),可以表示为一个简单的映射,如此:

{"aabbcc": "112233"}

显然,我可以将它们表示为两个字符串的结构,但我只是想知道是否有更快(即性能)或更高内存效率的方式来存储Go中的字符串?到目前为止,我只是轻易地深入研究了Go,所以不能很好地了解标准库,以便知道一个好的答案。

修改:了解我所获得的内容(使用伪代码):

我有来自不同来源的两个UUID,这些UUID是作为字符串生成/接收的:

uuid_a_1 = "aabb-1122-3344"
uuid_a_2 = "ddee-5566-7788"

我想将这些相互存储起来:

uuid_map[] = {uuid_a_1: uuid_a_2}

因此,当我查找另一个时,我可以返回一个:

return uuid_map[uuid_a_1]

我只是好奇是否有更有效的方法将这些存储在内存中而不是简单的字符串映射,因为我可能希望在进程的生命周期中存储数千个,并且想要能够尽快键入/值存储这些(这个想法是因为我知道键的确切大小和类型以及我可以快速完成的值)。

1 个答案:

答案 0 :(得分:2)

正如FUZxxl建议您可以将字符串编码为字节数组。

http://play.golang.org/p/7MYWTWSu2-

package main

import (
    "encoding/hex"
    "fmt"
    "strings"
)

func main() {
    b, err := hex.DecodeString(strings.Replace("df31a780-f640-11e3-a3ac-0800200c9a66", "-", "", -1))
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("Decoded:", b)  
    fmt.Println("Encoded:", hex.EncodeToString(b))
}