golang - encoding/json.marshal 和 fmt.sprintf?
GoLang - encoding/json.Marshal or fmt.sprintf?
哪个更快?
data := fmt.Sprintf("{\"TEST\":3, \"ID\":\"%s\"}", Id)
或json编组这样的结构?
很大程度上取决于您要执行的操作,您应该对其进行基准测试并查看。
但是对于您非常具体的示例,最快的方法就是使用基本的字符串连接,例如:
data := `{"TEST":3, "ID":"` + Id + `"}`
对于具有基本数据类型(字符串、布尔、整数)的 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 对象包含列表和嵌套对象等更复杂的数据类型,则这些结果将不成立。
哪个更快?
data := fmt.Sprintf("{\"TEST\":3, \"ID\":\"%s\"}", Id)
或json编组这样的结构?
很大程度上取决于您要执行的操作,您应该对其进行基准测试并查看。
但是对于您非常具体的示例,最快的方法就是使用基本的字符串连接,例如:
data := `{"TEST":3, "ID":"` + Id + `"}`
对于具有基本数据类型(字符串、布尔、整数)的 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 对象包含列表和嵌套对象等更复杂的数据类型,则这些结果将不成立。