Laurent Knauss Software Engineer
Stack illustration

A stack is a Last-In-First-Out (LIFO) data structure.
Below is a generic Go implementation supporting Push, Pop, Peek, and IsEmpty operations.

package main

import (
  "fmt"
)

type Stack[T any] struct {
  items []T
}

func (s *Stack[T]) Push(item T) {
  s.items = append(s.items, item)
}

func (s *Stack[T]) Pop() (T, error) {
  var zero T
  if len(s.items) == 0 {
    return zero, fmt.Errorf("stack is empty")
  }
  last := len(s.items) - 1
  item := s.items[last]
  s.items = s.items[:last]
  return item, nil
}

func (s *Stack[T]) Peek() (T, error) {
  var zero T
  if len(s.items) == 0 {
    return zero, fmt.Errorf("stack is empty")
  }
  return s.items[len(s.items)-1], nil
}

func (s *Stack[T]) IsEmpty() bool {
  return len(s.items) == 0
}

func main() {
  st := Stack[int]{}
  st.Push(1)
  st.Push(2)
  top, _ := st.Pop()
  fmt.Println("Popped:", top) // 2
  peek, _ := st.Peek()
  fmt.Println("Peek:", peek) // 1
  fmt.Println("Is empty?", st.IsEmpty()) // false
}
    How to Code a Stack in Golang | Laurent