W3Basic Logo

Go while Loop

A while loop is a control flow statement that allows code to be executed repeatedly until a condition is met. In Go, you use a for loop with a condition as it does not have a while.


While loops

Sometimes you do not know in advance how many times you want to repeat a block of code, just that a condition must be met before the loop stops. In this case, in most programming languages, you use a while loop. For example, in C, you would write:

while (condition) {
	// do something
}

But in Go, you use a for loop with a condition instead:

for condition {
	// do something
}

It can be slightly confusing at first, but you will get familiar with it quickly.

Approximating the square root of a number

A good usage of a while loop is to wait for a given precision to be reached in a calculation. Here let's say that we want to approximate the square root of a number.

package main

import (
	"fmt"
	"math"
)

func main() {
	var number float64
	fmt.Print("Enter a number: ")
	fmt.Scan(&number)

	approximation := number / 2
	for math.Abs(approximation*approximation - number) > 0.001 {
		approximation = (approximation + number/approximation) / 2
	}

	fmt.Printf("The square root of %f is %f\n", number, approximation)
}

Some things to note:

  • We use math.Abs to get the absolute value of a number, it should remind you of the fmt.Println function we used in the previous tutorials, the only difference is that the former has a return value (more on that in the tutorial on functions),
  • the condition of the for loop is math.Abs(approximation*approximation - number) > 0.001, it reads: "the precision is not good enough yet",
  • the formula to find a better approximation is approximation = (approximation + number/approximation) / 2, it is called the Babylonian method.

And sure enough,

$ go run square-root.go
Enter a number: 3
The square root of 3.000000 is 1.732143

And sure enough, 1.732143 squared is around 3.0003, which is close enough to 3.

Waiting for valid input

Another good usage of a while loop is to wait for the user to enter valid input. For example, let's say that we want to ask the user to enter a number between 1 and 10.

package main

import "fmt"

func main() {
	var number int = 0
	for number < 1 || number > 10 {
		fmt.Print("Enter a number between 1 and 10: ")
		fmt.Scan(&number)
	}
	fmt.Printf("You entered %d\n", number)
}

The number variable is initialized to 0 so that the loop is executed at least once.

© 2023 W3Basic. All rights reserved.

Follow Us: