我正在用golang写一个DNS协议解析器,想法是使用像这样的 map

var tidMap map[uint16] (chan []byte)

因此,对于tidMap映射,键是tid(事务ID),值是字节数组通道。

这个想法是,一个goroutine将尝试从通道获取值,另一个goroutine将通过侦听每个即将到来的数据包来尝试读取字节,并且一旦找到事务ID,便会将响应数据设置到tidMap,因此前一个goroutine将继续处理响应。

设计的一个问题是,我需要确保通道的缓冲区长度为1,以便可以将其他值推入通道而不会阻塞。

那么如何在tidMap声明中指定通道缓冲区长度?
var tidMap map[int] make(chan int, 1)

您不能在那里使用make()

最佳答案

通道缓冲区的长度不传达类型,因此您将必须添加逻辑以测试映射条目是否存在(如果不存在):

tidMap[0] = make(chan int, 1)

10-08 04:43