如何优雅的转换struct与bytes

刚入门Go,打算做个文件传输相关的小工具巩固相关知识,遇到了一个struct[]byte相互转换(encode、decode) 的问题。
情况描述: 为了实现多文件传输, 判断文件是否传输完成,我自定义了如下的一个结构体作为协议头(我不确定这么描述是否准确)

type FileEntry struct {
	FileLen  int64  // 文件长度
	NameLen  int    // 文件名长度
	Filename []byte // 文件名
}

在socket传输时,我打算按以下流程传输:
发送端

  1. 读文件,通过相关信息生成文件头
  2. 将文件头先发送给接收端
  3. 循环发送文件,直到发送完成

接收端

  1. 接收协议头
  2. 循环接收文件本体,根据协议头判断是否读取完成

发送第二个文件重复上述过程(为了解决小文件碎片问题,复用同一个tcp连接)

问题

我不清楚我这样的实现是否正确或优雅,有更好的方法烦请不吝指出。

我现在的问题:

  1. 发送端发送的时候如何将struct转成[]byte,从而通过tcp发送出去
  2. 接收端如何解码发送过来的头

我目前的解决办法:
结构体json[]byte

可以考虑用 protobuf

1 个赞