关于 number类型从vue端传到golang后端是float而不是int的事

一个是数据id ,一个是状态值,是一个数据状态更新接口,没想到:

go 复制代码
interface conversion: interface {} is float64, not int64
D:/ /golang.org/toolchain@v0.0.1-go1.25.0.windows-amd64/src/runtime/iface.go:275 (0x7ff626c37604)
    panicdottypeE: panic(&TypeAssertionError{iface, have, want, ""})
D:/Office/codes/gocodes/chuangn/chuangnong/app/business/laboratory/rule.go:124 (0x7ff627a3dbc5)
    (*Rule).PutUpdate: ruleId := parameter["rule_id"].(int64)

于是乎直接问大模型了 ,大致原因就是 :Go 的 encoding/json 包在解码 JSON 数字时, 默认使用 float64 类型 存储所有数字,无论是否有小数点。

其实这次我偷懒了,没有提前定义请求结构体,

go 复制代码
  type UpdateStatusRequest struct {
   ID     int64 `json:"id"`
   Status int   `json:"status"`
}

func (api *AlarmRule) PostUpdate_status(c *gin.Context) {
   body, _ := io.ReadAll(c.Request.Body)
   
   // 创建 decoder 并设置 UseNumber
   decoder := json.NewDecoder(bytes.NewReader(body))
   decoder.UseNumber()  // ✅ 关键:使用 json.Number
   
   var req UpdateStatusRequest
   if err := decoder.Decode(&req); err != nil {
       results.Failed(c, "参数解析失败", err)
       return
   }
   
   // 现在 req.ID 和 req.Status 是正确的 int 类型
   // 可以直接使用
   
   results.Success(c, "更新成功", nil, nil)
}
相关推荐
SameX几秒前
HarmonyOS ArkUI Dialog 复用 用 @CustomDialog + enum type 做多类型统一管理的做法
前端
AiMan17 分钟前
豆包爱学还是不可以导出左侧所有对话,只能单容导出,方法不对吗
前端
AiMan39 分钟前
Grok生成的内容能否下载吗?
前端
徐小夕1 小时前
JitArchives,一款基于JitWord协同AI文档打造的企业级电子档案系统
前端·vue.js·github
陈随易1 小时前
Node.js 2026上半年都有哪些性能提升?
前端·后端·程序员
墨林陌2 小时前
AI 热点日报(2026-11-09):苹果代理式Siri曝光,Anthropic推进IPO,编码智能体实测翻车
前端
vipxieliang2 小时前
JavaScript 迭代器与生成器:控制异步与惰性求值
前端·javascript
Hilaku2 小时前
Event Loop 这篇你看完就不用再看别的了!
前端·javascript·程序员
恋猫de小郭2 小时前
Flutter 下 AOT 一个你怎么都想不出来的 Bug ,JIT 正常的计算,在 AOT 居然算错了
android·前端·flutter