package tools import ( "context" "sync" ) type Stack struct { sync.Mutex items []func(context.Context) } func (s *Stack) Pop() func(context.Context) { s.Lock() defer s.Unlock() item := s.items[len(s.items)-1] s.items = s.items[:len(s.items)-1] return item } func (s *Stack) Push(item func(context.Context)) { s.Lock() defer s.Unlock() s.items = append(s.items, item) } func (s *Stack) Next() bool { return len(s.items) > 0 }