Sonic - Go 高性能 JSON 库
Sonic 是字节开源的高性能 JSON 处理库,性能比标准库快 3-10 倍。掌握 Sonic 是优化 JSON 处理性能的有效手段。
基础使用
📝 序列化和反序列化
package main
import (
"fmt"
"github.com/bytedance/sonic"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func main() {
user := User{
ID: 1,
Name: "Alice",
Email: "alice@example.com",
}
// 序列化
data, err := sonic.Marshal(user)
if err != nil {
panic(err)
}
fmt.Println(string(data))
// 反序列化
var user2 User
if err := sonic.Unmarshal(data, &user2); err != nil {
panic(err)
}
fmt.Printf("%+v\n", user2)
}
API 兼容
📝 替换标准库
package main
import (
sonic "github.com/bytedance/sonic"
)
// 只需替换导入
// import "encoding/json" → import sonic "github.com/bytedance/sonic"
// API 完全兼容
func example() {
// Marshal
data, _ := sonic.Marshal(obj)
// Unmarshal
sonic.Unmarshal(data, &obj)
// MarshalIndent
sonic.MarshalIndent(obj, "", " ")
// NewEncoder/NewDecoder
encoder := sonic.NewEncoder(writer)
decoder := sonic.NewDecoder(reader)
}
性能优势
📊 性能对比
// 基准测试结果 (参考值)
// Marshal 小对象:
// encoding/json: 500 ns/op
// Sonic: 150 ns/op (3.3x 更快)
// Unmarshal 小对象:
// encoding/json: 800 ns/op
// Sonic: 200 ns/op (4x 更快)
// Marshal 大对象:
// encoding/json: 50000 ns/op
// Sonic: 15000 ns/op (3.3x 更快)
// 使用建议:
// 1. 高并发 JSON 处理场景
// 2. 大 JSON 对象处理
// 3. 性能敏感的 API 服务