先来认识堆栈(例子)

为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是Stack.java的Go语言版本。

//实现堆栈的包集合
package collection

//生成空堆栈
type Stack struct {
    data []interface{}
}

//压栈顶
func (s *Stack) Push(x interface{}) {
    s.data = append(s.data, x)
}

//弹栈顶,并删除栈顶
//如果是空栈将会引发运行时错误
func (s *Stack) Pop() interface{} {
    i := len(s.data) - 1
    res := s.data[i]
    s.data[i] = nil  // to avoid memory leak
    s.data = s.data[:i]
    return res
}

//返回栈大小
func (s *Stack) Size() int {
    return len(s.data)
}
  • 用纯文本在声明语句上方添加注释。
  • 申明的名字写在类型的后面。
  • 结构体和Java中类相对应,但结构体的成员只能是变量,不能是方法。
  • interface{}类型对应Java中的Object。它不仅能代表引用类型,同时也能实现Go语言的所有类型。
  • (s *Stack)表示申明一个方法,s对应于Java中方法隐式传的this参数。
  • 操作符:=表示申明和初始化一个变量,其类型由初始化语句决定。