当前位置: 首页 > news >正文

golang用any类型去接收前端传的数字类型的值,类型断言为float64

在 Go 中,使用 any 类型接收前端传来的数字时,通常会发现其被类型断言为 float64。这是因为在 JSON 解码的过程中,Go 的 encoding/json 包会将数字解析为 float64。但如果你在结构体中指明字段为 int 类型,框架会根据字段类型进行适当的解析。

  1. 使用 any 类型接收数字
    当你使用 any 类型接收 JSON 数据时:

JSON 解析:Go 的 encoding/json 包将所有数字统一解析为 float64,这是为了兼容整数和浮点数。因为 JSON 中的数字没有类型限制,Go 选择 float64 来最大程度保留数值的范围和精度。
类型断言:因此,当你尝试将接收到的 any 类型的值进行类型断言时,通常会得到 float64。

var data map[string]any
err := json.Unmarshal([]byte(`{"value": 42}`), &data)
if value, ok := data["value"].(float64); ok {fmt.Println(value) // 输出: 42
}
  1. 指明 int 类型解析为 int
    当你在结构体中定义字段为 int 类型时:

字段类型:Go 的 JSON 解码器会根据字段的类型信息进行解析。如果字段是 int,那么解析器会尝试将 JSON 中的数字直接转换为 int 类型。
自动转换:从 JSON 中接收到的整数会被正确地解析为 int,而不会被转换为 float64。
示例

type QueryParams struct {Page  int `json:"page" binding:"required"`Limit int `json:"limit" binding:"required"`
}var params QueryParams
err := json.Unmarshal([]byte(`{"page": 2, "limit": 10}`), &params)
// 此时 params.Page 和 params.Limit 都会是 int 类型

总结

使用 any 类型:接收到的数字会被解析为 float64,因为 JSON 数字没有类型限制,而 Go 选择 float64 以兼容各种数字类型。
指明具体类型:如果字段类型被明确为 int,Go 的 JSON 解码器会将 JSON 中的数字直接解析为 int,无需进行类型断言。
这种机制使得 Go 在处理 JSON 数据时更具灵活性,同时也能保持类型的准确性

Go 的 any 类型:
any 是 Go 1.18 引入的一个新类型,实际上是 interface{} 的别名。它可以持有任何类型的值。当 JSON 解码时,数字会被解析为 float64 类型并存储在 any 中。

http://www.lryc.cn/news/459023.html

相关文章:

  • 5、Spring Boot 3.x 集成 RabbitMQ
  • ENSP搭建基础网络拓扑图
  • 尚硅谷rabbitmq 2024 消息可靠性答疑二 第22节
  • 在 Ubuntu 上安装 Whisper 支撑环境(ffmpeg、PyTorch)的教程(2024亲测可用)
  • vue+echarts实现雷达图及刻度标注
  • 【进阶OpenCV】 (9)--摄像头操作--->答题卡识别改分项目
  • 实时从TDengine数据库采集数据到Kafka Topic
  • Linux -- 初识动静态库
  • vite 打包前请求接口和打包后的不一致
  • fairseq 安装包python
  • 使用Mockaroo生成测试数据
  • 使用频率最高的 opencv 基础绘图操作 - python 实现
  • Python 在Excel中添加数据条
  • Unity中搜索不到XR Interaction Toolkit包解决方法
  • 【前端】JQ验证每个单选按钮是否已经选择
  • 【无人机设计与控制】滑模控制、反步控制、传统PID四旋翼无人机轨迹跟踪控制仿真
  • MongoDB 介绍
  • 计算机网络:物理层 —— 物理层概述
  • HTTP的工作原理
  • 缓存数据减轻服务器压力
  • 【自动驾驶】控制算法(十二)横纵向综合控制 | 从理论到实战全面解析
  • Python基础之List列表用法
  • 视觉检测开源库-功能包框架搭建
  • pytest的基础入门
  • (31)非零均值信号的时域分析:均值、方差、与功率
  • 架设传奇SF时提示此服务器满员,GEE引擎点开始游戏弹出服务器满员的解决方法
  • QT day06
  • 微信小程序-npm支持-如何使用npm包
  • Spring Cloud Stream 3.x+kafka 3.8整合
  • JavaScript中的数组