How to convert a bool to a string in Go?
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?
Solution 1:
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:
The two main options are:
strconv.FormatBool(bool) string
-
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:
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.