先来认识堆栈(例子)
为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是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参数。
- 操作符:=表示申明和初始化一个变量,其类型由初始化语句决定。