Как отдавать сообщения различных типов?
Ссылка скопирована
type Packet struct { Type uint8 Timestamp uint32 Data []byte } func ReadPacket(packet *Packet) error { // somehow read data into the packet return nil } type Message interface {} type VideoMessage struct { Timestamp uint32 Data []byte } type CallMessage struct { CallID uint32 Procedure string } func ReadMessage() (Message, error) { var packet Packet if err := ReadPacket(&packet); err != nil { return err } switch packet.Type { case PacketVideo: return &VideoMessage{ Timestamp: packet.Timestamp, Data: packet.Data, }, nil case PacketUserData: callID, procedure := getCallInfo(&packet) return &UserDataMessage{ CallID: callID, Procedure: procedure, }, nil default: return nil, ErrInvalidPacketType } }
Сейчас ситуация такая: проблема в том, что я постоянно выделяю память для сообщений.
По вводным: есть идея реализовать union тип по примеру C, но тогда нарушится безопасность типов.
Сейчас ситуация такая: либо можно попробовать использовать какой-то пул памяти и выделять место под сообщения там, но я не уверен насчет этого решения
Либо что-то такое
func ReadCallMessage(packet *Packet, mesg *CallMessage) { // read packet into mesg } func main() { for { var packet Packet if err := ReadPacket(&packet); err != nil { continue } switch packet.Type { case PacketCall: mesg := CallMessage{} ReadCallMessage(&packet, &mesg) } } }
Какие варианты решения стоит рассмотреть?
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопросВам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
0 ответов
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
0 ответов
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
0 ответов
Telegram
Как диагностировать ошибку с подключением к прокси в мобильном приложении Telegram?
0 ответов
