Runtime stack bug?!

I’m trying to implement DFS Algo in golang and i’m keep getting this error.I don’t know where it comes? It is a bug , i’m really heating the stack that much?

My code :

package main

import "fmt"

const (
	startNode = "S"
	endNode   = "G"
)

type Graph struct {
	nodes []Node
}

type Node struct {
	container string
	neighbour []Node
	visited   bool
}

func newGraph(nrNodes uint8) *Graph {
	graph := &Graph{}
	graph.nodes = make([]Node, nrNodes)
	return graph
}

func (g *Graph) init() {

	g.nodes[0].container = "S"
	g.nodes[1].container = "A"
	g.nodes[2].container = "B"
	g.nodes[3].container = "C"
	g.nodes[4].container = "D"
	g.nodes[5].container = "E"
	g.nodes[6].container = "G"
	cnt := len(g.nodes)

	for i := 0; i < cnt; i++ {
		g.nodes[0].visited = false
	}

	// S
	g.nodes[0].neighbour = make([]Node, 2)
	// A
	g.nodes[1].neighbour = make([]Node, 2)
	// B
	g.nodes[2].neighbour = make([]Node, 2)
	// C
	g.nodes[3].neighbour = make([]Node, 1)
	// D
	g.nodes[4].neighbour = make([]Node, 1)
	// E

	// S
	g.nodes[0].neighbour[0] = g.nodes[1]
	g.nodes[0].neighbour[1] = g.nodes[2]
	// A
	g.nodes[1].neighbour[0] = g.nodes[2]
	g.nodes[1].neighbour[1] = g.nodes[4]
	// B
	g.nodes[2].neighbour[0] = g.nodes[1]
	g.nodes[2].neighbour[1] = g.nodes[3]
	// C
	g.nodes[3].neighbour[0] = g.nodes[5]
	// D
	g.nodes[4].neighbour[0] = g.nodes[6]
}

func (g Graph) printGraph() {
	for i := 0; i < len(g.nodes); i++ {
		fmt.Println("Node " + g.nodes[i].container)
		fmt.Print("Visited: ")
		fmt.Println(g.nodes[i].visited)
		fmt.Print("Neinghours: ")
		if len(g.nodes[i].neighbour) > 0 {
			for j := 0; j < len(g.nodes[i].neighbour); j++ {
				fmt.Print(g.nodes[i].neighbour[j].container + " ")
			}
		} else {
			fmt.Print("None ")
		}
		fmt.Println()
		fmt.Println()
	}
}

type Stack struct {
	container []Node
	len       uint8
}

func (s *Stack) Pop() {
	if s.len > 0 {
		s.container = s.container[:len(s.container)-1]
	}
}

func (s *Stack) Push(x Node) {
	s.container = append(s.container, x)
	s.len = s.len + 1
}

func (s Stack) Print() {
	fmt.Println(s.len)
	var i uint8
	for i = 0; i < s.len; i++ {
		fmt.Println(s.container[i].container)
		fmt.Println(s.container[i].neighbour)
		fmt.Println(s.container[i].visited)
	}
}

func newStack() *Stack {
	return &Stack{}
}

func main() {
	graph := newGraph(7)
	stack := newStack()
	graph.init()
	stack.Push(graph.nodes[2])
	stack.Print()
}

And the error i’m gettin when i’m using this method func(s Stack) Print(); Notice when i’m doing like fmt.Println(s.container[i].neighbour)) i’m seeing this.

└────╼ go run main.go 
1
B
runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow

runtime stack:
runtime.throw(0x50f380, 0xe)
	/usr/lib/go/src/runtime/panic.go:527 +0x90
runtime.newstack()
	/usr/lib/go/src/runtime/stack1.go:800 +0xb17
runtime.morestack()
	/usr/lib/go/src/runtime/asm_amd64.s:330 +0x7f

goroutine 1 [stack growth]:
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b25d, 0x0)
	/usr/lib/go/src/fmt/print.go:855 fp=0xc8400fa468 sp=0xc8400fa460
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b25d, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fa558 sp=0xc8400fa468
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b25c, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8400fad10 sp=0xc8400fa558
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b25c, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fae00 sp=0xc8400fad10
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b25b, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8400fb5b8 sp=0xc8400fae00
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b25b, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fb6a8 sp=0xc8400fb5b8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b25a, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8400fbe60 sp=0xc8400fb6a8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b25a, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fbf50 sp=0xc8400fbe60
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b259, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8400fc708 sp=0xc8400fbf50
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b259, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fc7f8 sp=0xc8400fc708
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b258, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8400fcfb0 sp=0xc8400fc7f8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b258, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fd0a0 sp=0xc8400fcfb0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b257, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8400fd858 sp=0xc8400fd0a0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b257, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fd948 sp=0xc8400fd858
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b256, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8400fe100 sp=0xc8400fd948
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b256, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fe1f0 sp=0xc8400fe100
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b255, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8400fe9a8 sp=0xc8400fe1f0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b255, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400fea98 sp=0xc8400fe9a8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b254, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8400ff250 sp=0xc8400fea98
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b254, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400ff340 sp=0xc8400ff250
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b253, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8400ffaf8 sp=0xc8400ff340
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b253, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8400ffbe8 sp=0xc8400ffaf8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b252, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8401003a0 sp=0xc8400ffbe8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b252, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840100490 sp=0xc8401003a0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b251, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840100c48 sp=0xc840100490
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b251, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840100d38 sp=0xc840100c48
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b250, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8401014f0 sp=0xc840100d38
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b250, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8401015e0 sp=0xc8401014f0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b24f, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840101d98 sp=0xc8401015e0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b24f, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840101e88 sp=0xc840101d98
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b24e, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840102640 sp=0xc840101e88
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b24e, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840102730 sp=0xc840102640
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b24d, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840102ee8 sp=0xc840102730
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b24d, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840102fd8 sp=0xc840102ee8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b24c, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840103790 sp=0xc840102fd8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b24c, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840103880 sp=0xc840103790
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b24b, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840104038 sp=0xc840103880
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b24b, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840104128 sp=0xc840104038
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b24a, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8401048e0 sp=0xc840104128
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b24a, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8401049d0 sp=0xc8401048e0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b249, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840105188 sp=0xc8401049d0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b249, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840105278 sp=0xc840105188
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b248, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840105a30 sp=0xc840105278
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b248, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840105b20 sp=0xc840105a30
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b247, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8401062d8 sp=0xc840105b20
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b247, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8401063c8 sp=0xc8401062d8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b246, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840106b80 sp=0xc8401063c8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b246, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840106c70 sp=0xc840106b80
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b245, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840107428 sp=0xc840106c70
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b245, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840107518 sp=0xc840107428
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b244, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840107cd0 sp=0xc840107518
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b244, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840107dc0 sp=0xc840107cd0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b243, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840108578 sp=0xc840107dc0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b243, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840108668 sp=0xc840108578
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b242, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840108e20 sp=0xc840108668
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b242, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840108f10 sp=0xc840108e20
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b241, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8401096c8 sp=0xc840108f10
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b241, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8401097b8 sp=0xc8401096c8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b240, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840109f70 sp=0xc8401097b8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b240, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010a060 sp=0xc840109f70
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b23f, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc84010a818 sp=0xc84010a060
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b23f, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010a908 sp=0xc84010a818
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b23e, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc84010b0c0 sp=0xc84010a908
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b23e, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010b1b0 sp=0xc84010b0c0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b23d, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc84010b968 sp=0xc84010b1b0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b23d, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010ba58 sp=0xc84010b968
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b23c, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc84010c210 sp=0xc84010ba58
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b23c, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010c300 sp=0xc84010c210
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b23b, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc84010cab8 sp=0xc84010c300
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b23b, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010cba8 sp=0xc84010cab8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b23a, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc84010d360 sp=0xc84010cba8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b23a, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010d450 sp=0xc84010d360
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b239, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc84010dc08 sp=0xc84010d450
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b239, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010dcf8 sp=0xc84010dc08
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b238, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc84010e4b0 sp=0xc84010dcf8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b238, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010e5a0 sp=0xc84010e4b0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b237, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc84010ed58 sp=0xc84010e5a0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b237, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010ee48 sp=0xc84010ed58
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b236, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc84010f600 sp=0xc84010ee48
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b236, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010f6f0 sp=0xc84010f600
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b235, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc84010fea8 sp=0xc84010f6f0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b235, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc84010ff98 sp=0xc84010fea8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b234, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840110750 sp=0xc84010ff98
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b234, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840110840 sp=0xc840110750
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b233, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840110ff8 sp=0xc840110840
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b233, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8401110e8 sp=0xc840110ff8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b232, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8401118a0 sp=0xc8401110e8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b232, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840111990 sp=0xc8401118a0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b231, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840112148 sp=0xc840111990
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b231, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840112238 sp=0xc840112148
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b230, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc8401129f0 sp=0xc840112238
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b230, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840112ae0 sp=0xc8401129f0
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b22f, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc840113298 sp=0xc840112ae0
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc820014180, 0xf9, 0x76, 0x3b22f, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840113388 sp=0xc840113298
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b22e, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840113b40 sp=0xc840113388
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc8200141f0, 0xf7, 0x76, 0x3b22e, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840113c30 sp=0xc840113b40
fmt.(*pp).printReflectValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b22d, 0x0)
	/usr/lib/go/src/fmt/print.go:932 +0x3b79 fp=0xc8401143e8 sp=0xc840113c30
fmt.(*pp).printValue(0xc82005c270, 0x4eb440, 0xc8200141e0, 0xf9, 0x76, 0x3b22d, 0xf9)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc8401144d8 sp=0xc8401143e8
fmt.(*pp).printReflectValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b22c, 0x0)
	/usr/lib/go/src/fmt/print.go:990 +0x13e3 fp=0xc840114c90 sp=0xc8401144d8
fmt.(*pp).printValue(0xc82005c270, 0x4bd980, 0xc820014190, 0xf7, 0x76, 0x3b22c, 0xf7)
	/usr/lib/go/src/fmt/print.go:848 +0x440 fp=0xc840114d80 sp=0xc840114c90
...additional frames elided...
exit status 2

It happens because fmt.Println automatically tries to recursively print everything. But, since you have a circular reference in your stack, it exceeds the limit.

Add this to your code, and it should work:

func (n Node) String() string {
	return n.container
}

Simplest way to recreate the issue:

package main

import "fmt"

type Node struct {
	Children []Node
}

func main() {
	X := Node{Children: []Node{{}}}
	X.Children[0] = X

	fmt.Printf("%p\n", &X.Children[0])
	fmt.Printf("%p\n", &X.Children[0].Children[0])
	fmt.Println(X)
}

I.e. a list contains itself recursively.

In fmt documentation you can find:

Infinite recursion can also be triggered by self-referential data structures, such as a slice that contains itself as an element, if that type has a String method. Such pathologies are rare, however, and the package does not protect against them.

3 Likes

Thanks this makes sense a lot, and making struct Node implements the the interface Stringer resolved my problem.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.