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)
小智 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