How to convert a bool to a string in Go?

GoType Conversion

Go Problem Overview


I am trying to convert a bool called isExist to a string (true or false) by using string(isExist) but it does not work. What is the idiomatic way to do this in Go?

Go Solutions


Solution 1 - Go

use the strconv package

docs

strconv.FormatBool(v)

> func FormatBool(b bool) string FormatBool returns "true" or "false"
> according to the value of b

Solution 2 - Go

The two main options are:

  1. strconv.FormatBool(bool) string
  2. fmt.Sprintf(string, bool) string with the "%t" or "%v" formatters.

Note that strconv.FormatBool(...) is considerably faster than fmt.Sprintf(...) as demonstrated by the following benchmarks:

func Benchmark_StrconvFormatBool(b *testing.B) {
  for i := 0; i < b.N; i++ {
    strconv.FormatBool(true)  // => "true"
    strconv.FormatBool(false) // => "false"
  }
}

func Benchmark_FmtSprintfT(b *testing.B) {
  for i := 0; i < b.N; i++ {
    fmt.Sprintf("%t", true)  // => "true"
    fmt.Sprintf("%t", false) // => "false"
  }
}

func Benchmark_FmtSprintfV(b *testing.B) {
  for i := 0; i < b.N; i++ {
    fmt.Sprintf("%v", true)  // => "true"
    fmt.Sprintf("%v", false) // => "false"
  }
}

Run as:

$ go test -bench=. ./boolstr_test.go 
goos: darwin
goarch: amd64
Benchmark_StrconvFormatBool-8   	2000000000	         0.30 ns/op
Benchmark_FmtSprintfT-8         	10000000	       130 ns/op
Benchmark_FmtSprintfV-8         	10000000	       130 ns/op
PASS
ok  	command-line-arguments	3.531s

Solution 3 - Go

In efficiency is not too much of an issue, but genericity is, just use fmt.Sprintf("%v", isExist), as you would for almost all the types.

Solution 4 - Go

you may use strconv.FormatBool like this:

package main

import "fmt"
import "strconv"

func main() {
	isExist := true
	str := strconv.FormatBool(isExist)
	fmt.Println(str)        //true
	fmt.Printf("%q\n", str) //"true"
}

or you may use fmt.Sprint like this:

package main

import "fmt"

func main() {
	isExist := true
	str := fmt.Sprint(isExist)
	fmt.Println(str)        //true
	fmt.Printf("%q\n", str) //"true"
}

or write like strconv.FormatBool:

// FormatBool returns "true" or "false" according to the value of b
func FormatBool(b bool) string {
	if b {
		return "true"
	}
	return "false"
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCasperView Question on Stackoverflow
Solution 1 - GoBrrrrView Answer on Stackoverflow
Solution 2 - GomaericsView Answer on Stackoverflow
Solution 3 - GoakimView Answer on Stackoverflow
Solution 4 - Gouser6169399View Answer on Stackoverflow