我正在用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)