GoLang 的字符串映射键中是否有任何字符串长度限制?

Kok*_*zzu 1 string hashtable go

Go 的字符串映射键是否有最大长度?实际上我使用https://github.com/OneOfOne/cmap而不是 Go 的地图。

问题是,我使用的密钥cmap长度约为 200-4000 个字符,这会是一个问题/陷阱吗?

import "github.com/kokizzu/gotro/I"
import "sync/atomic"

var CACHE_IDX int64
var CACHE_KEYS cmap.CMap

func init() {
    CACHE_KEYS = cmap.New()
}

// change a really long string to a shorter one 
func RamKey_ByQuery(query string) string {
    nkey := CACHE_KEYS.Get(query)
    if nkey != nil {
        return nkey.(string)
    }
    new_idx := atomic.AddInt64(&CACHE_IDX, 1)
    ram_key := `:` + I.ToS(new_idx) // convert integer to string
    CACHE_KEYS.Set(query, ram_key)
    return ram_key
}
Run Code Online (Sandbox Code Playgroud)

Bor*_*éec 9

我认为唯一的限制是你的记忆力。


小智 5

根据 go 文档,len()函数必须与string返回的函数兼容int。int 类型在 32 位系统上通常为 32 位宽,在 64 位系统上通常为 64 位宽。

因此,有符号的范围int-2^(n -1) ~ 2^(n-1) -1。由于长度不能为负数,因此应该是0 ~ 2^(n-1) -1

参考 - https://golang.org/pkg/builtin/#len