在golang频道中,最后推送的元素最后消耗。但有没有办法将元素推向前线"通道,以便元素有机会被拒绝消耗?假设元素1,2,3,4,5,6,7,8被添加到通道中,元素4无法处理(1,2,3被成功处理)。在这种情况下,我想再次将元素4推送到通道,使得它可以在元素5,6,7,8和后续元素添加之前获得处理(如果它们尚未从通道中拉出)用于处理)。使用阻塞队列可以轻松实现这一点。但我不想使用它们。
答案 0 :(得分:4)
但有没有办法将元素推送到频道的“前端”
没有。
答案 1 :(得分:2)
不,通道严格是FIFO。如果您想要优先级,或者使用其他一些数据结构,例如堆:https://golang.org/pkg/container/heap/,您必须使用多个通道。