package stack type Stack []interface{} func NewStack() Stack { return Stack{} } func (s *Stack) Push(v interface{}) { *s = append(*s, v) } func (s *Stack) Pop() (v interface{}, ok bool) { size := len(*s) - 1 if ok = size >= 0; ok { v, *s = (*s)[size], (*s)[:size] } return v, ok }