关于 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 小时前
Webpack 快速上手:前端工程化、打包原理、从零搭建基础项目
前端·webpack·前端工程化
zhanghaha13144 小时前
HTML系列教程:12_HTML 表格 <table> 零基础详解
前端·html
Betterme4 小时前
Vue3 竞态请求防护组合式hooks:useLatestRequest 设计思路
前端
_zhourui_h_4 小时前
一个 [ECS] 到底生成了多少代码?EasyECS 最核心的秘密都在这里
前端
梨想橙汁4 小时前
Git 分支详解:创建切换、合并分支、冲突解决实战
前端·git
雪芽蓝域zzs4 小时前
Vue3 defineProps` / `defineEmits` 是编译器宏,不需要手动 import 导入
前端·javascript·vue.js
whyweplay5 小时前
Elpis:从Json Schema 到 页面
前端·javascript
做萤石二次开发的哈哈5 小时前
海康班班通交互一体机技能接入实战:ISAPI透传+OTAP双协议封装,Web/App/小程序教学管理应用一站生成
前端·物联网·小程序·交互·萤石开放平台·蓝海aiot一站式工作台·aiot开发
计算机魔术师5 小时前
Anthropic一次性锁死十年算力,5170亿美元买什么
前端
IT_陈寒5 小时前
Redis的订阅丢失消息?你可能忘了这个配置
前端·人工智能·后端