Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,959 questions

51,901 answers

573 users

How to implement a stack using slice in Go

2 Answers

0 votes
package main

import "fmt"

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

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

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

func main() {
	stack := Stack{}

	// Push items onto the stack
	stack.Push(10)
	stack.Push(20)
	stack.Push(30)
	stack.Push(40)

	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: [10 20 30 40]
Popped: 40
Popped: 30
Stack after pops: [10 20]

*/






 



answered Aug 15, 2025 by avibootz
0 votes
package main

import (
	"fmt"
	"sync"
)

// Stack structure
type Stack struct {
	items []int
	lock  sync.Mutex
}

// Push adds an item to the stack
func (s *Stack) Push(item int) {
	s.lock.Lock()
	defer s.lock.Unlock()
	s.items = append(s.items, item)
}

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

func main() {
	stack := Stack{}

	// Push items onto the stack
	stack.Push(10)
	stack.Push(20)
	stack.Push(30)
	stack.Push(40)
	stack.Push(50)

	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: [10 20 30 40 50]
Popped: 50
Popped: 40
Stack after pops: [10 20 30]

*/

 



answered Aug 15, 2025 by avibootz
...