Use continue to skip one loop pass and break to stop a loop early.

loop control `continue` jumps to the next iteration, while `break` exits the loop.

Break and Continue

stopAt
break_continue.go
Replay: real traced execution (multi-file project)
package main

import "fmt"

func main() {
	var stopAt = 5
	accepted := []int{}

	for number := 1; number <= 8; number++ {
		if number%2 == 0 {
			continue
		}
		if number > stopAt {
			break
		}

		accepted = append(accepted, number)
	}

	fmt.Println("stopAt=", stopAt)
	fmt.Println("accepted=", accepted)
}
package main

import "fmt"

func main() {
	var stopAt = 3
	accepted := []int{}

	for number := 1; number <= 8; number++ {
		if number%2 == 0 {
			continue
		}
		if number > stopAt {
			break
		}

		accepted = append(accepted, number)
	}

	fmt.Println("stopAt=", stopAt)
	fmt.Println("accepted=", accepted)
}
package main

import "fmt"

func main() {
	var stopAt = 7
	accepted := []int{}

	for number := 1; number <= 8; number++ {
		if number%2 == 0 {
			continue
		}
		if number > stopAt {
			break
		}

		accepted = append(accepted, number)
	}

	fmt.Println("stopAt=", stopAt)
	fmt.Println("accepted=", accepted)
}
  1. stopAt ← 5, accepted ← []int{}

    5func main() {6  var stopAt→ 5 = 5 //@stopAt=3, 77  accepted→ []int{} := []int{}
  2. accepted ← []int{1}

    pass 1 of 7
    9for number1 := 1; number <= 8; number++ {10  if number%2 == 0 {11    continue12  }13  if number > stopAt {14    break15  }1617  accepted→ []int{1} = append(accepted, number1)18}
    All 7 passes — pass 1 is the card above
    passnumberstopAtaccepted
    11[]int{} []int{1}
    22
    33[]int{1} []int{1, 3}
    44
    55[]int{1, 3} []int{1, 3, 5}
    66
    775
  3. if number%2 == 0

    pass 1 of 3
    9for number := 1; number <= 8; number++ {10  if number2%2 == 0 {11    continue12  }
    All 3 passes — pass 1 is the card above
    passnumberstopAt
    12
    24
    365
  4. if number > stopAt

    12}13if number7 > stopAt5 {14  break15}
  5. fmt.Println("stopAt=", stopAt)

    20  fmt.Println("stopAt=", stopAt5)21  fmt.Println("accepted=", accepted[]int{1, 3, 5})22}
    outputstopAt= 5
    accepted= [1 3 5]
  1. stopAt ← 3, accepted ← []int{}

    5func main() {6  var stopAt→ 3 = 37  accepted→ []int{} := []int{}
  2. accepted ← []int{1}

    pass 1 of 5
    9for number1 := 1; number <= 8; number++ {10  if number%2 == 0 {11    continue12  }13  if number > stopAt {14    break15  }1617  accepted→ []int{1} = append(accepted, number1)18}
    All 5 passes — pass 1 is the card above
    passnumberstopAtaccepted
    11[]int{} []int{1}
    22
    33[]int{1} []int{1, 3}
    44
    553
  3. if number%2 == 0

    pass 1 of 2
    9for number := 1; number <= 8; number++ {10  if number2%2 == 0 {11    continue12  }
  4. if number%2 == 0

    pass 2 of 2
    9for number := 1; number <= 8; number++ {10  if number4%2 == 0 {11    continue12  }
  5. if number > stopAt

    12}13if number5 > stopAt3 {14  break15}
  6. fmt.Println("stopAt=", stopAt)

    20  fmt.Println("stopAt=", stopAt3)21  fmt.Println("accepted=", accepted[]int{1, 3})22}
    outputstopAt= 3
    accepted= [1 3]
  1. stopAt ← 7, accepted ← []int{}

    5func main() {6  var stopAt→ 7 = 77  accepted→ []int{} := []int{}
  2. accepted ← []int{1}

    pass 1 of 8
    9for number1 := 1; number <= 8; number++ {10  if number%2 == 0 {11    continue12  }13  if number > stopAt {14    break15  }1617  accepted→ []int{1} = append(accepted, number1)18}
    All 8 passes — pass 1 is the card above
    passnumberaccepted
    11[]int{} []int{1}
    22
    33[]int{1} []int{1, 3}
    44
    55[]int{1, 3} []int{1, 3, 5}
    66
    77[]int{1, 3, 5} []int{1, 3, 5, 7}
    88
  3. if number%2 == 0

    pass 1 of 4
    9for number := 1; number <= 8; number++ {10  if number2%2 == 0 {11    continue12  }
    All 4 passes — pass 1 is the card above
    passnumber
    12
    24
    36
    48
  4. fmt.Println("stopAt=", stopAt)

    20  fmt.Println("stopAt=", stopAt7)21  fmt.Println("accepted=", accepted[]int{1, 3, 5, 7})22}
    outputstopAt= 7
    accepted= [1 3 5 7]

Follow the Loop Control

  1. stopAt starts at 5.
  2. The loop checks numbers from 1 through 8.
  3. continue skips even numbers.
  4. break stops once the number is greater than 5.
  5. The accepted odd numbers are [1 3 5]. | number | action | accepted | | --- | --- | --- | | 1 | keep | [1] | | 2 | skip even | [1] | | 3 | keep | [1 3] | | 4 | skip even | [1 3] | | 5 | keep | [1 3 5] | | 6 | stop | [1 3 5] |

Exercise: break_continue.go

Reproduce accepted= [1 3 5], then use the pinned stopAt variants to predict [1 3] and [1 3 5 7].