How to restart a for loop in Go
Situations can occur where you want to reset a for loop so that it starts iterating from the beginning of the collection once again. In this article, you’ll see how to do it in Go using a for..range loop and a traditional for loop.
Restart a for..range loop
There’s no way to reset a for..range loop in Go. However, you can use the
goto keyword with a label to achieve a similar effect by starting the
iteration again from the beginning. Here’s how to do it:
 1package main
 2
 3import "fmt"
 4
 5func main() {
 6	slice := []int{1, 2, 3, 4, 5}
 7
 8	var count int
 9loop:
10	for _, v := range slice {
11		fmt.Println(v)
12
13		count++
14		if count == 2 {
15			goto loop
16		}
17	}
18}In the above snippet, the for..range loop is given a label (loop, but it can
be any name you want). Inside the loop, the goto keyword is used to break out
of the loop once a certain condition is achieved. This moves control back to
line 10 which effectively starts the loop from the beginning.
1
2
1
2
3
4
5Restart a standard for loop
In the snippet below, a traditional for loop is used to iterate over a slice of
integers. When it’s time to reset the loop, the iterator (i) is set to -1.
On the next iteration, i will be incremented before the loop body is executed
(i++) which yields 0 causing the loop to have the effect of starting from
the beginning.
package main
import "fmt"
func main() {
	slice := []int{1, 2, 3, 4, 5}
	var count int
	for i := 0; i < len(slice); i++ {
		fmt.Println(slice[i])
		count++
		if count == 2 {
			i = -1 // restart from the beginning
		}
	}
}You can use this technique if you want the loop to start at any index other than
zero. All you need to do is set i to one less the desired index.
Thanks for reading, and happy coding!