在部署的appengine应用程序中,用户的ID是否可以超过64位?

时间:2015-11-29 01:26:57

标签: google-app-engine go

我正在使用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是否也会出现此错误?

2 个答案:

答案 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就足够了。