学 Go 必备:一篇搞懂 Gob 数据的传输与还原

文摘   2025-02-03 21:44   四川  

Go 语言入门,不少人从实现网络服务起步。数据传输是一道必过的坎。今天说一说 Go 里的 Gob 怎么用来传数据。动手前,心里先有个数。

Gob 是 Go 语言自己的序列化方式。啥是序列化?说得直白点,就是把内存里的对象变成一串字节,发出去。别人接到后,能原样还原。在分布式系统、缓存系统里常用。至于为何用 Gob,不为啥,就因为它直接内置,简单省事。

先来点基础准备。定义个结构体。假设我们在弄用户信息,姓名、年龄。别废话,看代码

go


type User struct {
    Name string
    Age  int
}

有了数据结构,数据咋发?又咋收?简单,Gob 提供编码和解码,咱逐一试。

编码!发出去之前先变身

go


// 先搞个 buffer 用来存字节
var network bytes.Buffer

// 新建个 encoder
encoder := gob.NewEncoder(&network)

// 实例个 User
user := User{Name: "张三", Age: 25}

// 开始编码!将 user 序列化后,存到 network 里
encoder.Encode(user)

一旦变成 bytes,网络对面,接收的一端正等着还原它。这就要 解码!数据得复原

go


// network 里的字节流发到对端,假设他接到啦
var receivedUser User

// 新建 decoder,依然传入 buffer
decoder := gob.NewDecoder(&network)

// 将收到的字节流解码,重新还原出 User 对象
decoder.Decode(&receivedUser)

// 验证下对不对,看看名字、年龄
fmt.Println("收到用户:", receivedUser.Name, receivedUser.Age)

你自己尝试,也可以弄复杂些,传数组、传复杂对象,本质相差不大。重点要关注啥?类型匹配!发出去时啥类型,收的时候务必对上,不然人家不认识。曾经一次我不小心用错了类型,Gob 冷笑一声,抛了个错误给我。别图快,悠着来,步步小心。

带交互的收发也不麻烦。比如你服务端要接多个客户,好的连接传递常见个例子:类似上面说的流程,无非套上一层循环,等待源源不断请求。又或者客户端是发起请求的一方,凭你安排。调整各式角色不难,会了单个 Gob,其余你自己任意组合玩出花样


粒粒快点跑
我是粒姐,11年老猎头,职业咨询顾问,曾创立两家猎头公司。 分享求职技巧和职场经验,职业愿景是帮助1000人找到心仪工作。 猎聘签约求职教练,1V1咨询,求职辅导,职业规划咨询,职场辅导。视频号:#粒粒快点跑
 最新文章