How to implement generic a stack using slice in Go

1 Answer

0 votes
package main

import "fmt"

// Stack structure
type Stack struct {
	items []interface{}
}

// Push adds an item to the stack
func (s *Stack) Push(item interface{}) {
	s.items = append(s.items, item)
}

// Pop removes and returns the top item from the stack
func (s *Stack) Pop() interface{} {
	if len(s.items) == 0 {
		fmt.Println("Stack is empty!")
		return nil
	}
	top := s.items[len(s.items) - 1]
	s.items = s.items[:len(s.items) - 1]
	
	return top
}

func main() {
	stack := Stack{}

	// Push items of different types
	stack.Push(892)
	stack.Push("Go")
	stack.Push(3.14)

	fmt.Println("Stack after pushes:", stack.items)

	// Pop items from the stack
	fmt.Println("Popped:", stack.Pop())
	fmt.Println("Popped:", stack.Pop())
	
	fmt.Println("Stack after pops:", stack.items)
}




/*
run:

Stack after pushes: [892 Go 3.14]
Popped: 3.14
Popped: Go
Stack after pops: [892]

*/




answered Aug 15, 2025 by avibootz
...