1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   | package main
  import "fmt"
  type MyQueue struct {     inStack  []int     outStack []int }
  func Constructor() MyQueue {     return MyQueue{} }
  func (q *MyQueue) Enqueue(x int) {     q.inStack = append(q.inStack, x) }
  func (q *MyQueue) Dequeue() int {     if len(q.outStack) == 0 {         q.transfer()     }
      if len(q.outStack) == 0 {                  return 0     }
      val := q.outStack[len(q.outStack)-1]     q.outStack = q.outStack[:len(q.outStack)-1]     return val }
  func (q *MyQueue) transfer() {     for len(q.inStack) > 0 {         q.outStack = append(q.outStack, q.inStack[len(q.inStack)-1])         q.inStack = q.inStack[:len(q.inStack)-1]     } }
  func main() {     queue := Constructor()
      queue.Enqueue(1)     queue.Enqueue(2)     queue.Enqueue(3)
      fmt.Println(queue.Dequeue())      fmt.Println(queue.Dequeue()) 
      queue.Enqueue(4)
      fmt.Println(queue.Dequeue())      fmt.Println(queue.Dequeue())  }
 
   |