Go开发REST API实现文章ID自增时strconv.Itoa不接受int64类型值报错
问题根源
strconv.Itoa() 函数仅接收 int 类型的入参,而你通过 strconv.ParseInt() 解析得到的 lastId 是 int64 类型,Go语言不支持不同数值类型的隐式自动转换,因此会抛出类型不兼容的编译错误。
解决方案
你可以任选以下两种方案修复:
方案1:强制类型转换为int后传入
如果你的业务中ID数值不会超过int类型的上限(32位系统上限为231-1,64位系统为263-1),直接做类型转换即可:
// 仅修改报错行,将lastId转为int类型 Id: strconv.Itoa(int(lastId)),
方案2:使用int64专属的字符串转换方法
如果ID数值可能很大,推荐直接使用strconv.FormatInt处理int64类型转字符串,更稳妥:
// 替换Itoa为FormatInt,第二个参数10表示按十进制转换 Id: strconv.FormatInt(lastId, 10),
额外优化建议
你当前的代码错误处理顺序有问题:ParseInt执行后没有立刻判断错误就先操作了lastId,如果解析ID失败,会使用默认0值计算得到错误的新ID,建议调整顺序为:
lastId, err := strconv.ParseInt(Articles[len(Articles) - 1].Id, 10, 64) // 先判断错误,出错直接返回不再执行后续逻辑 if err != nil { http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } lastId = lastId + 1
内容的提问来源于stack exchange,提问作者Karan Kumar
相关产品推荐
相关产品推荐

