← Excelize | Validator →

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 服务

📖 延伸阅读