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

作者:张富春(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不死,这个问题会一直痛下去。

posted on 2022-11-24 16:27  ahfuzhang  阅读(364)  评论(0)    收藏  举报