【问题标题】:Is there any string length limit in GoLang's string map key?GoLang 的字符串映射键中是否有任何字符串长度限制?
【发布时间】:2017-04-02 04:24:16
【问题描述】:

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
}

【问题讨论】:

  • 您的问题是关于 Go 的内置地图类型还是关于 cmap?对于 Go:阅读规范。如果地图密钥长度没有限制(没有),那么就没有限制。对于 cmap:为什么不问问作者呢?
  • 顺便说一句:您的代码中有几个陷阱,但与映射键长度无关。
  • 因为cmap内部使用map

标签: string go hashtable


【解决方案1】:

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

所以,签名int 的范围是-2^(n -1) ~ 2^(n-1) -1。由于长度不能为负数,所以应该是0 ~ 2^(n-1) -1

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

【讨论】:

  • 所以对于 64 位系统,我想一个字符串可能是 math.MaxInt64 个字符长,在我的电脑上是 9223372036854775807。出于好奇,我在 Quora 上找到了这个:一本典型的 250 页精装书有大约 50 万个字符,包括空格。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 2012-11-09
    • 2019-06-17
    • 1970-01-01
    • 2011-07-19
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多