| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | package diffmatchpatchimport (	"fmt")type Stack struct {	top  *Element	size int}type Element struct {	value interface{}	next  *Element}// Len returns the stack's lengthfunc (s *Stack) Len() int {	return s.size}// Push appends a new element onto the stackfunc (s *Stack) Push(value interface{}) {	s.top = &Element{value, s.top}	s.size++}// Pop removes the top element from the stack and return its value// If the stack is empty, return nilfunc (s *Stack) Pop() (value interface{}) {	if s.size > 0 {		value, s.top = s.top.value, s.top.next		s.size--		return	}	return nil}// Peek returns the value of the element on the top of the stack// but don't remove it. If the stack is empty, return nilfunc (s *Stack) Peek() (value interface{}) {	if s.size > 0 {		value = s.top.value		return	}	return -1}// Clear empties the stackfunc (s *Stack) Clear() {	s.top = nil	s.size = 0}func main() {	stack := new(Stack)	stack.Push("Things")	stack.Push("and")	stack.Push("Stuff")	for stack.Len() > 0 {		fmt.Printf("%s ", stack.Pop().(string))	}	fmt.Println()}
 |