package main import "errors" // Helper functions for slices, to make them behave more like stacks func peek[T any](s []T) (T, error) { if len(s) < 1 { return *new(T), errors.New("Stack empty") } return s[len(s)-1], nil } func mustPop[T any](sp *[]T) T { val, err := pop(sp) if err != nil { panic(err) } return val } func pop[T any](sp *[]T) (T, error) { if len(*sp) < 1 { return *new(T), errors.New("Stack empty") } to_return := (*sp)[len(*sp)-1] *sp = (*sp)[:len(*sp)-1] return to_return, nil }