我正在使用Go中的appengine应用程序,当我尝试获取appengine User
的ID并使用此代码将其转换为64位int:
id, err := strconv.ParseInt(user.ID, 10, 64)
我收到了这个错误:
ERROR: error executing inner: strconv.ParseInt: parsing "185804764220139124118": value out of range
部署代码中的appengine ID是否也会出现此错误?
答案 0 :(得分:4)
User
类型的ID
字段定义为类型string
。仅仅因为它包含数字,不能保证它适合int64
。
Go AppengineSDK使用适合int64
的值,但在生产环境中却不是这样。它们通常比int64
的最大值长。它们会以string
的形式发给您,所以请对待它们:string
s。没有什么能迫使你将它们转换为数字。我不知道你有什么想法将它们转换为数字,但不要这样做。它们是string
s。
注意:User.ID
不应与定义为int64
类型的Key.IntID()
混淆。
答案 1 :(得分:-1)
最有可能是的。阅读app engine documentation,写成:
默认策略生成随机的未使用ID序列 近似均匀分布。每个ID最多可以为16位小数 数字很长。
来自Go specs int32是-2147483648 through 2147483647.
,这对于16位小数是不够的,但int64
就足够了。