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 对象包含列表和嵌套对象等更复杂的数据类型,则这些结果将不成立。