随着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
,但是考虑到跨语言项目时,建议最好不要使用这种编程语言独有的序列化方法,因为如果要切换语言,那就又要造轮子了。
常见的跨语言的序列化有:json
、xml
、Protocol Buffer
。