# 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.