关于this question,我试图将数据存储库密钥从Form转换为int64,并在该密钥的帮助下尝试更新数据存储库中的记录。我尝试使用与参考链接中选择的答案完全相同的代码,但是出现错误,提示Unable to parse key. strconv.ParseInt: parsing "/Users,6248007768440574": invalid syntax
我从表单传递的值是/Users,6248007768440574
格式的数据存储键。我意识到语法错误是因为这个。有人可以帮我解决这个问题吗?或者,是否存在将字符串转换为* datastore.Key的方法?任何帮助将不胜感激
答案 0 :(得分:0)
ParseInt返回错误,因为字符串"/Users,6248007768440574"
不是整数。子字符串是整数,而不是整个字符串。
问题中的字符串是通过调用Key.String创建的。数据存储包没有提供解析此方法输出的方法。对于没有祖先键的情况,这是一个简单的解析器:
var keyPat = regexp.MustCompile(`^/([^\.]*),(\d+)$`)
func parseKey(s string) (*datastore.Key, error) {
m := keyPat.FindStringSubmatch(s)
i := strings.Index(s, ",")
if i < 0 {
return nil, errors.New("bad format")
}
n, err := strconv.ParseInt(m[2], 10, 64)
if err != nil {
return nil, err
}
return datastore.IDKey(m[1], n, nil), nil
}