1. package queue
    2. import "fmt"
    3. var _ IQueue = (*Queue)(nil)
    4. type Item interface{}
    5. type Queue struct {
    6. Items []Item
    7. }
    8. type IQueue interface {
    9. EnQueue(v interface{}) *Queue
    10. }
    11. // 初始化一个队列
    12. func NewQueue() *Queue {
    13. return &Queue{
    14. Items: []Item{},
    15. }
    16. }
    17. // 进入队列
    18. func (q *Queue) EnQueue(v interface{}) *Queue {
    19. q.Items = append(q.Items, v)
    20. return q
    21. }
    22. // 出队列
    23. func (q *Queue) DeQueue() interface{} {
    24. var item interface{}
    25. if len(q.Items) > 0 {
    26. item = q.Items[0]
    27. q.Items = q.Items[1:]
    28. }
    29. return item
    30. }
    31. // 遍历队列
    32. func (q *Queue) Print() {
    33. var format string
    34. for _, v := range q.Items {
    35. format += fmt.Sprintf("%v->", v)
    36. }
    37. fmt.Println(format)
    38. }