博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go深度拷贝msgpack版
阅读量:5287 次
发布时间:2019-06-14

本文共 1293 字,大约阅读时间需要 4 分钟。

通关msgpack的序列化和反序列化进行深度拷贝

package mainimport (	"fmt"	"reflect"	"github.com/vmihailenco/msgpack")type (	Player struct {		Id     int		Level  int		Heroes map[int]*Hero		Equips []*Equip	}	Hero struct {		Id     int		Level  int		Skills []*Skill	}	Equip struct {		Id    int		Level int	}	Skill struct {		Id    int		Level int	})func NewHero() *Hero {	return &Hero{		Id:     1,		Level:  1,		Skills: append([]*Skill{NewSkill()}, NewSkill(), NewSkill()),	}}func NewSkill() *Skill {	return &Skill{1, 1}}func NewEquip() *Equip {	return &Equip{1, 1}}func NewPlayer() *Player {	return &Player{		Id:     1,		Level:  1,		Heroes: map[int]*Hero{1: NewHero(), 2: NewHero(), 3: NewHero()},		Equips: append([]*Equip{NewEquip()}, NewEquip(), NewEquip()),	}}func MsgPackDeepCopy(dst, src interface{}) error {	b, err := msgpack.Marshal(src)	if err != nil {		return err	}	err = msgpack.Unmarshal(b, dst)	if err != nil {		return err	}	return nil}func main() {	p1 := NewPlayer()	p2 := new(Player)	MsgPackDeepCopy(p2, p1)	fmt.Println(reflect.DeepEqual(p1, p2))}//output//true//goos: windows//goarch: amd64//pkg: game.lab/go-deepcopy/src/msgpack//100000	     20220 ns/op//PASS// 性能测试func BenchmarkMsgPack(b *testing.B) {	p1 := NewPlayer()	p2 := new(Player)	for i:=0 ; i

  

转载于:https://www.cnblogs.com/LittleLee/p/9342887.html

你可能感兴趣的文章
DRF之分页器组件
查看>>
JS中this的用法
查看>>
高频交易算法研发心得--MACD指标算法及应用
查看>>
python读写文件
查看>>
使用Visual Studio 2013进行单元测试--初级篇
查看>>
花式索引
查看>>
用python正则提取字符串的方法
查看>>
NHibernate系列学习(三)-条件查询Criteria
查看>>
C++11并发——多线程std::mutex (二)
查看>>
vue router
查看>>
第三次实训作业
查看>>
git
查看>>
FastClick 导致聚焦有问题
查看>>
第二百三十八节,Bootstrap输入框和导航组件
查看>>
js重写原型对象
查看>>
$this的用法
查看>>
linux如何安装java环境
查看>>
Android中gravity的含义
查看>>
求大神给解决下,向已有的xml文件写入数据,但不覆盖文件存在的内容
查看>>
深入理解java嵌套类和内部类
查看>>