Golang generate random boolean [Simple Examples]


Written by - Tuan Nguyen
Reviewed by - Deepak Prasad

In this tutorial, we will walk through some examples of generating random boolean in Golang

 

Example 1: Simple rand.Intn() solution to generate random boolean

func (r *Rand) Intn(n int) int: Intn returns, as an int, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n <= 0.

In this example, we will write a function using rand.Intn() to random generate boolean. The ideal is: we random an int (which can be 0 or 1), if the result is 0 then return false, otherwise return true. Consider the code show below:

package main

import (
    "math/rand"
    "time"
	"fmt"
)

func main() {
	// try to generate random boolean 20 times
	for i := 1; i <= 20; i++ {
		testBoo := randomBool()
		fmt.Println("Random the", i, "time, result is: ", testBoo)
	}
}

// returns a random boolean value based on the current time
func randomBool() bool {
    rand.Seed(time.Now().UnixNano())
    return rand.Intn(2) == 1
}

Output:

Random the 1 time, result is:  false
Random the 2 time, result is:  false
Random the 3 time, result is:  false
Random the 4 time, result is:  false
Random the 5 time, result is:  true
Random the 6 time, result is:  true
Random the 7 time, result is:  true
Random the 8 time, result is:  true
Random the 9 time, result is:  true
Random the 10 time, result is:  false
Random the 11 time, result is:  false
Random the 12 time, result is:  false
Random the 13 time, result is:  false
Random the 14 time, result is:  true
Random the 15 time, result is:  true
Random the 16 time, result is:  true
Random the 17 time, result is:  true
Random the 18 time, result is:  true
Random the 19 time, result is:  true
Random the 20 time, result is:  true

Noted that: this is indicated in the math/Rand package documentation: If distinct behavior is desired for each run, use the Seed method to initialize the default Source. If we don't seed, our application will always return the same pseudo-random data.

 

Example 2: Same idea but some variant examples

This function returns true if the random integer is even else it returns false:

func randomBool() bool{
	rand.Seed(time.Now().UnixNano())
	return rand.Int() % 2 == 0 
}

In this code shown below, we random a float32, if the value is smaller than 0.5 then return true, otherwise return false:

// returns a random boolean value based on the current time
func randomBool() bool {
    rand.Seed(time.Now().UnixNano())
    return rand.Float32() < 0.5
}
package main

import (
	"fmt"
	"math/rand"
	"time"
	)

func main() {
	// try to generate random boolean 20 times
	for i := 1; i <= 20; i++ {
		testBoo := randomBool()
		fmt.Println("Random the", i, "time, result is: ", testBoo)
	}
}

func randomBool() bool {
	rand.Seed(time.Now().UnixNano())
    return rand.Float32() < 0.5
}

Output:

Random the 1 time, result is:  false
Random the 2 time, result is:  false
Random the 3 time, result is:  false
Random the 4 time, result is:  false
Random the 5 time, result is:  false
Random the 6 time, result is:  false
Random the 7 time, result is:  false
Random the 8 time, result is:  false
Random the 9 time, result is:  false
Random the 10 time, result is:  false
Random the 11 time, result is:  false
Random the 12 time, result is:  true
Random the 13 time, result is:  true
Random the 14 time, result is:  true
Random the 15 time, result is:  true
Random the 16 time, result is:  true
Random the 17 time, result is:  false
Random the 18 time, result is:  false
Random the 19 time, result is:  false
Random the 20 time, result is:  false

 

Summary

A few examples of creating a random boolean have been covered. The general ideal is to generate a single random number between 0 and 2, and to return true if the value is 1 and false otherwise. The article also introduces a few modifications on the previously mentioned strategy.

 

References

https://pkg.go.dev/math/rand
generate a random bool in go

 

Views: 22

Tuan Nguyen

He is proficient in Golang, Python, Java, MongoDB, Selenium, Spring Boot, Kubernetes, Scrapy, API development, Docker, Data Scraping, PrimeFaces, Linux, Data Structures, and Data Mining. With expertise spanning these technologies, he develops robust solutions and implements efficient data processing and management strategies across various projects and platforms. You can connect with him on LinkedIn.

Categories GO

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com

Thank You for your support!!

Leave a Comment