通过 sonic 可以将任意 byte 数据反序列化为一个任意复合类型,maps、struct 都可以。但是 struct 类型需定义结构体字段标签(tag)
在go 1.23.0
后的版本前我们一般使用 interface{}
来表示一个空类型,在该版本后我们使用 any
来表示任意类型。
sonic 能够反序列化至 any 表示的成员中,但是当我们在使用时,需要通过ok test
去对该成员进行一个断言。
main.gopackage main import ( "fmt" "log" "github.com/bytedance/sonic" ) type demoS struct { Digit int `json:"digit"` Str string `json:"str"` } func main() { var params map[string]any json := demoS{ Str: "Hello world", } data, err := sonic.Marshal(json) if err != nil { log.Fatalln(err) } err = sonic.Unmarshal(data, ¶ms) if err != nil { log.Fatalln(err) } for _, v := range params { fmt.Println(v) } }