Go 重構 PHP 項目的一個神器 jsoniter

Go 和 PHP 通訊是痛苦的,PHP 這個神奇的 json ,各類奇奇怪怪的 json 都能生成出來,若是一開始就奇怪直接用interface也就算了,最可怕那種是類型會變。html

在用 Go 重構 PHP 項目的時候,兩個項目每每會共享存儲,咱們在生成緩存的時候,也常常把數據轉成 json 去存儲。git

我大 PHP 生成 json 有這麼兩個另 Go 崩潰的事情,一個是 int 和 string 的不肯定,第二個就是 PHP array是空的時候,序列化出來是[],可是不爲空的時候,序列化出來的是{"key":"value"}。 可是 jsoniter (https://github.com/json-iterator/go、http://jsoniter.com/go-tips.cn.html)對能夠作模糊轉換,省了不少事情。github

看個例子json

package main
import (
    "fmt"
    "github.com/json-iterator/go"
    "github.com/json-iterator/go/extra"
)
func main() {
    extra.RegisterFuzzyDecoders()
    var i int
    var json = jsoniter.ConfigCompatibleWithStandardLibrary
    json.Unmarshal([]byte(`"1"`), &i)
    fmt.Printf("我是int %d\n",i)
    var s string
    json.Unmarshal([]byte(`"1"`), &s)
    fmt.Printf("我是string %s\n",s)
    var m map[string]interface{}
    jsoniter.UnmarshalFromString(`{}`, &m)
    fmt.Printf("我是map %s\n",m)
    return
}

結果緩存

我是int 1
我是string 1
我是map map[]

若是沒有 jsoniter ,斷言寫到手軟也就算了,程序來幾個panic,case study 寫到手軟才最慘。架構

固然了 jsoniter 也不是萬能的,它也僅僅能處理這兩種比較常見的,遇到其餘奇葩 json 估計只能斷言、switch v.(type) case 寫到手軟了。code

更多架構、PHP、GO相關踩坑實踐技巧請關注個人公衆號:PHP架構師 htm

相關文章
相關標籤/搜索