最近在使用 golang 處理 JSON 數(shù)據(jù)時遇到了一個問題,就是解析 JSON 數(shù)據(jù)的速度非常慢。
我的應(yīng)用場景是讀取一個大型 JSON 文件,然后解析成一個 Go 對象列表進(jìn)行操作。但是讀取和解析的時間比我預(yù)計的要多得多。
我想到了一些可能的原因,例如 I/O 操作和 Go 語言的垃圾回收機(jī)制。但是在仔細(xì)檢查和測試之后,我發(fā)現(xiàn)問題的根本原因是 Go 語言自身的 JSON 解析庫。
// 一個例子 users := make([]User, 0, 1000) file, err := os.Open(filepath) if err != nil { return nil, err } defer file.Close() decoder := json.NewDecoder(file) for { var u User if err := decoder.Decode(&u); err == io.EOF { break } else if err != nil { return nil, err } users = append(users, u) }
上面這段代碼是一個簡單的 JSON 解析器。但是,當(dāng)我在本地機(jī)器上解析一個 100 MB 大小的文件時,它需要約 30 秒才能完成。我嘗試過幾個不同的 JSON 解析庫,但是它們的解析速度非常相似。
因此,我得出結(jié)論:Go 語言自帶的 JSON 解析庫就是太慢了。
作為一種處理 JSON 的流行語言, Go 語言應(yīng)該提供更快速和有效的 JSON 解析庫。但是,目前的情況似乎仍然很糟糕。
如果你也遇到了類似的問題,那么我建議你嘗試一些替代庫,例如:github.com/valyala/fastjson 或 github.com/json-iterator/go。它們的性能和速度比 Go 自帶庫要好很多。