随着Go语言的快速发展,以及其卓越的性能优势,有不少PHP项目转换为Go语言,那么php独有的serialize()unserialize()数据,在Go语言怎么解析呢?

其实只要找到php中序列化的编码规则,就可以用Go去实现序列化和反序列了。

Github上已经有实现的库了,https://github.com/leeqvip/gophp

go get -u github.com/leeqvip/gophp

来看下官方给出的示例:

package main

import (
    "fmt"

    "github.com/leeqvip/gophp"
)

func main() {

    str := `a:1:{s:3:"php";s:24:"世界上最好的语言";}`

    // unserialize() in php
    out, _ := gophp.Unserialize([]byte(str))

    fmt.Println(out) //map[php:世界上最好的语言]

    // serialize() in php
    jsonbyte, _ := gophp.Serialize(out)

    fmt.Println(string(jsonbyte)) // a:1:{s:3:"php";s:24:"世界上最好的语言";}
}

其实在Go语言也有自己独有的序列化方法gob,但是考虑到跨语言项目时,建议最好不要使用这种编程语言独有的序列化方法,因为如果要切换语言,那就又要造轮子了。

常见的跨语言的序列化有:jsonxmlProtocol Buffer