首页 > 其他分享 >【解决了一个小问题】es query返回数据中, int64类型精度丢失的问题

【解决了一个小问题】es query返回数据中, int64类型精度丢失的问题

时间:2022-11-24 16:34:40浏览次数:60  
标签:struct json int64 es query 精度

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


首先定义了一个简单的结构体来接收es query返回的数据:

// ElasticSearchResponse es query查询返回的结果格式
type ElasticSearchResponse struct {
	Hits struct {
		Total struct {
			Value int64 `json:"value"`
		} `json:"total"`
		Hits []struct {
			Source map[string]interface{} `json:"_source"`
		} `json:"hits"`
	} `json:"hits"`
	Error map[string]interface{} `json:"error"`
}

使用中发现某些int64类型的值,读出来后精度丢失。
解决办法参考了这篇文章:https://www.cnblogs.com/hi3254014978/p/16702845.html

具体代码如下:

	esRsp := &ElasticSearchResponse{}
	decoder := json.NewDecoder(bytes.NewReader(body))
	decoder.UseNumber()
	// err = json.Unmarshal(body, esRsp) // 这里出现整形的精度丢失
	err = decoder.Decode(esRsp)

总结:
1.es作为大型系统软件,应该要支持二进制PB格式的输出,这样精度的问题就彻底没了;
2.已经无数次遇到了int64的精度,以及用string类型代替int64等这一类的问题了。JSON不死,这个问题会一直痛下去。

标签:struct,json,int64,es,query,精度
From: https://www.cnblogs.com/ahfuzhang/p/16922292.html

相关文章

  • Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque 题解
    圆由于没有相交,之间的关系要么毫无关系,要么就是包含,所以能形成树。直接包含的就是父节点。如果只有一组,不分前半夜后半夜的话,那么舒适度就是每棵树的根节点(深度为0)面积......
  • ES5 绑定 this 的方法
    this的动态切换,固然为JavaScript创造了巨大的灵活性,但也使得编程变得困难和模糊。有时,需要把this固定下来,避免出现意想不到的情况。JavaScript提供了call、apply、bind......
  • Kubernetes(K8S) 介绍
    MasterApiServer统一入口,以Restful方式,交给etcd存储Scheduler节点调试,选择Node节点,做应用部署ControllerManager处理集群中常规后台任务,一个资源对应......
  • CodeForces - 311B Cats Transport
    题意:洛谷翻译超可爱的放一下qwq解:先设dp[i][j]为安排前i个人接前j只猫的最小等待时间。显然要给猫排个序。猫可以等人,但人不会等猫。于是算一下每只猫需要人在什么时......
  • jquery+js实现下载服务器目录中的文件
    functiontemplateDownLoad(){$.ajax({url:resolve("aaa/bbb/ccc/targetFile.txt#"),}).success(function(data,status){download('targetFile......
  • jquery实现多个异步方法的同步调用
    js顺序执行两个异步方法需求场景:[由于某种影响,框架环境不能支持es6的promise语法]1、第一下拉框需要进行加载字典【已经封装好的方法1】异步2、加载完成字典之后才能赋值......
  • npm does not support Node.js的解决办法
    1、查看npm和nodejs的版本是否配套。查看地址:​​以往的版本|Node.js​​2、如果还是不行,尝试切换镜像地址#强烈建议不要用直接使用cnpm安装,会有各种诡异的bug,可以通......
  • Nginx10 Lua入门 + openresty
    1Idea中创建Lua项目lua官网:https://www.lua.org/ 1.1添加插件,重启idea 1.2创建项目file-NewProject 1.3创建lua文件 1.4配置lua运行程序1......
  • s3 upload files with shell script
    TL;DR#!/usr/bin/envbash#hangj.cnblogs.coms3_key="Q3AM3UQ867SPQQA43P2F"s3_secret="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"session_token="Security-Tok......
  • CMake no longer defines WIN32 on Cygwin!
    set(CMAKE_LEGACY_CYGWIN_WIN320)#RemovewhenCMake>=2.8.4isrequiredcmake_minimum_required(VERSION3.1)​​https://stackoverflow.com/questions/28683365/how......