哪个会更快?
data := fmt.Sprintf("{\"TEST\":3, \"ID\":\"%s\"}", Id)
或者json编组这样的结构吗?
答案 0 :(得分:2)
对于具有基本数据类型(string,bool,int)的JSON,fmt.Sprintf
更快。基准测试表明,对于渲染非常小的JSON对象,它的速度是json.Marshal
的两倍,随着更多数据的添加,性能的差异也在增加。
使用两种方法渲染JSON对象的基准测试结果(为清晰起见,每次10,000,000次)如下:
Benchmarks for rendering a small JSON object
Time taken to render JSON object using json.Marshal: 8.747821898s
Time taken to render JSON object using fmt.Sprintf: 4.452937712s
Benchmarks for rendering a larger JSON object
Time taken to render JSON object using json.Marshal: 32.100388801s
Time taken to render JSON object using fmt.Sprintf: 10.392861696s
请注意,如果您的JSON对象包含更复杂的数据类型(如列表和嵌套对象),则这些结果不会成立。
答案 1 :(得分:1)
在很大程度上取决于你尝试做什么,你应该对它进行基准测试并看到。
但是对于非常具体的示例,最快的方法是使用基本的字符串连接,如:
data := `{"TEST":3, "ID":"` + Id + `"}`