🥴

Go言語でやりがちな個人的ポカ集

2023/04/23に公開

うっかりやっちゃったことのメモ。継ぎ足す予定。

Stringerインターフェースの実装で無限ループ

公式ドキュメントで既出のネタ。https://pkg.go.dev/fmt#:~:text=infinite recursion

https://zenn.dev/oksongh/articles/343ebdc86bcd2e でやらかした。
自分で実装した構造体にStringerインターフェースを実装すると、fmt.Println()とかでをカスタマイズできる。ListNodeのString()の実装の中で、Stringerインターフェースを呼ぶfmt.Sprintf("%v\n", node)を使っている。
無限に再帰呼び出ししてしまう。

type ListNode struct {
	Val  int
	Next *ListNode
}
func (head *ListNode) String() string {
	s := ""
	for node := head; node != nil; node = node.Next {
		s += fmt.Sprintf("%v\n", node)
	}
	return s
}
func main(){
	l := &ListNode{Val: 1,Next: nil}
	fmt.Println(l.String())
}

Discussion