gpt4 book ai didi

go - 正确的惯用字节缓冲区读写

转载 作者:IT王子 更新时间:2023-10-29 01:39:59 25 4
gpt4 key购买 nike

我打开了一个网络/套接字。我需要离线阅读结构化协议(protocol)。即我有

messagelength|type|value|type|value ...

其中 messagelength 为 4 个字节,类型为一个字节,值取决于类型,...

我正在尝试在 go 中找出执行此操作的简单方法。我被 io、bufio、编码淹没了……我找不到合适的起点,也找不到样本。寻找 ReadInt32、ReadByte、....

接下来 - 我需要组装一个回复 -> WriteInt32、WriteString、WriteByte,....

尝试将python转go,python代码使用struct.unpack/pack

最佳答案

您可以使用包 encoding/binary .您需要的唯一功能是 Read()Write() .以下是您如何使用它们:

Read() 函数具有以下签名:

func Read(r io.Reader, order ByteOrder, data interface{}) error

此函数从 r 中按 ByteOrder 顺序读取数据。 data 必须是指向固定大小值(例如 int32、字节或仅具有固定大小成员的结构)或此类值的一部分的指针。如果您传递一个指向结构的指针,结构字段将在没有填充的情况下读入,与空白字段(即那些名为 _ 的字段)对应的数据将被读取并丢弃(填充的理想选择)。

针对您的具体问题,声明一个与您的数据流 header 相匹配的结构。

type Header struct {
Length uint32
Type uint8
}

使用数据包的 header (假设大端):

var hdr Header
if err = Read(connection, binary.BigEndian, &hdr); err != nil {
// deal with read error
}

切换类型字节:

switch hdr.Type {
// for each type, read into a type-specific struct
// ...
}

Write() 类似,但写入而不是读取。

关于go - 正确的惯用字节缓冲区读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com