写点什么

Go 中队列的实现

用户头像
baiyutang
关注
发布于: 2 小时前

译者:baiyutang

原文:https://medium.com/@ermanimer/queue-implementation-in-go-e9445b6f5e77


队列是使用先入先出方法的一种线性数据结构,先入队的元素会第一个出队。


Item 代表我们的队列节点,在这个例子中是空的结构体:

type Item struct{}
复制代码

Queue 定义了队列的基本行为:

type Queue interface {  Enqueue(*Item)  Dequeue(context.Context)(*Item,error)}
复制代码

queue 实现了 Queue 接口,有 items 和 isEmpty 的 chnnel。 items 和 isEmpty 是带缓冲区 channel。

type queue struct {		items chan []*item    isEmpty chan bool}
var _ Queue = (*quque)(nil)
复制代码


NewQueue 创建并返回一个新的且为空的队列。


func NewQueue() Queue {   items := make(chan []*Item,1)	 isEmpty := make(chan bool,1)   isEmpty <- true   reture &queue{items,isEmpty}}
复制代码


Enqueue 向对接中入队一个节点:

func (q *queue) Enqueu(i *item) {  var items []*Item  select {    case item = <- q.items:    case <- q.isTmpey  }  items = append(items,i)  q.items <- items}
复制代码


Dequeue 是出队并队列中返回一个节点。

func(q *queue) Dequeue(c context.Context) (*Item,error) {  var items []*Item  select {    case items = <-q.items:    case <-c.Done():    return nil ,c.Err()  }  item :=items[0]  if len(items) == 1 {  	q.isEmpty <- ture  }    return item, nil}
复制代码

所有的代码,在这里能找到。


发布于: 2 小时前阅读数: 10
用户头像

baiyutang

关注

广州 2017.12.13 加入

Microservices | Golang | Cloud Nitive | “Smart work,Not hard”

评论

发布
暂无评论
Go 中队列的实现