gpt4 book ai didi

go - map channel 的设计模式?

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:43 25 4
gpt4 key购买 nike

我正在用golang写一个DNS协议(protocol)解析器,想法是使用这样的映射

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

所以对于tidMap map,key是tid(交易ID),value是字节数组channel。

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

设计的一个问题是我需要确保 channel 的缓冲区长度为 1,以便可以将额外的值插入 channel 而不会阻塞。

那么如何在 tidMap 声明中指定 channel 缓冲区长度?

var tidMap map[int] make(chan int, 1)

你不能在那里使用 make()

最佳答案

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

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

关于go - map channel 的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21300967/

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