关于 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)
}
相关推荐
风骏时光牛马4 分钟前
大模型底层架构与AI源码深度剖析
前端
掘金挖土1 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
中文呀3 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进4 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万7425 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿5 小时前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
全栈项目管理程序猿5 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
拖孩7 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579007 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端