Golang Go语言中 有啥好用的 phpserialize 函数么的等价物
Golang Go语言中 有啥好用的 phpserialize 函数么的等价物
公司项目都是以 PHP 为主,最近搞几个 go 项目需要 rpc 调取以前 PHP 写的服务。
但是内部的 PHP 服务都是通过 PHP 的 serialize()
函数序列化的。所以就想找找 go 有没有 unserialize()
的函数。
github 找了几个包, 大部分都是把 PHP 的 array 解析成了 map ,并且类型是 map[interface{}]interface{}
然后就遇到下一个问题 没法转 json。
虽然暂时修改了下包 把返回值变成了 map[string]interface{}
但是还一个问题就是 没法正确的区分是不是数组。
所以就来请教下万能的 V2er,go 有没有好用的 phpserialize 函数, 可以准确区分 array 和 map 的那种
更多关于Golang Go语言中 有啥好用的 phpserialize 函数么的等价物的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
接上
为什么 其它语言实现的几乎都是 Map,是因为 serialize 序列化后的结果,数组和哈希表是没啥区别的,唯一的区别就是键的类型是否有 i 或 s.
1. 只要出现 s,那么必须是 map
2. 全部都是 i , 如果最后的每个键都自增,那么就是 array
3. 否则,还是 map
<?php
$person = [1,2,3,4,6];
echo serialize($person);
echo “\n\n”;
$person = [1, 10 => 2,3,4,6];
echo serialize($person);
echo “\n\n”;
$person = [
‘name’ => ‘yufei’,
‘age’ => 28,
‘address’ => ‘dd’
];
echo serialize($person);
echo “\n\n”;
$person = [
‘88’,
‘name’ => ‘yufei’,
‘age’ => 28,
‘address’ => ‘dd’,
‘99’
];
echo serialize($person);
echo “\n\n”;
$person = [[
‘name’ => ‘yufei’,
‘age’ => 28,
‘address’ => ‘dd’
],
[
‘name’ => ‘yufei’,
‘age’ => 28,
‘address’ => ‘dd’
]
];
echo serialize($person);
echo “\n\n”;
结果如下
a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:6;}
a:5:{i:0;i:1;i:10;i:2;i:11;i:3;i:12;i:4;i:13;i:6;}
a:3:{s:4:“name”;s:5:“yufei”;s:3:“age”;i:28;s:7:“address”;s:2:“dd”;}
a:5:{i:0;s:2:“88”;s:4:“name”;s:5:“yufei”;s:3:“age”;i:28;s:7:“address”;s:2:“dd”;i:1;s:2:“99”;}
a:2:{i:0;a:3:{s:4:“name”;s:5:“yufei”;s:3:“age”;i:28;s:7:“address”;s:2:“dd”;}i:1;a:3:{s:4:“name”;s:5:“yufei”;s:3:“age”;i:28;s:7:“address”;s:2:“dd”;}}
感谢回复。
作为一个专业的 VC 党,打算先来请教下是否已经有了合适的包, 如果有的话 就不自己写一遍了。
实在没有的话,就只能自己写一个了
我看了下 github 上的,没有你要的,所以才来写文告知你详情
即使你自己实现,也是要先实现 map[string]interface{} 的。然后再判断是否数组
已经实现了 map[string]interface{}了, 项目比较紧,暂时这样可以满足需求,就没进一步改。
稍微有时间之后继续改改。 感谢大佬,我也是翻了翻 github 没找到合适的
我最近写了一个,如果你知道序列化之前是数组还是 map 的话,那用法跟 json 包一样… https://github.com/Trim21/go-phpserialize