¿Cómo convertir un bool en una cadena en Go?

84

Estoy tratando de convertir una boolllamada isExista string( trueo false) usando string(isExist)pero no funciona. ¿Cuál es la forma idiomática de hacer esto en Go?

Casper
fuente
strconv.FormatBool(t)para establecer trueen "verdadero". strconv.ParseBool("true")para establecer "verdadero" true. Consulte stackoverflow.com/a/62740786/12817546 .
Tom L

Respuestas:

150

usa el paquete strconv

docs

strconv.FormatBool(v)

func FormatBool (b bool) string FormatBool devuelve "verdadero" o "falso"
según el valor de b

Brrrr
fuente
20

Las dos opciones principales son:

  1. strconv.FormatBool(bool) string
  2. fmt.Sprintf(string, bool) stringcon los formateadores "%t"o "%v".

Tenga en cuenta que strconv.FormatBool(...)es considerablemente más rápido que lo fmt.Sprintf(...)que demuestran los siguientes puntos de referencia:

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"
  }
}

Correr como:

$ 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
maerics
fuente
8

puede usar strconv.FormatBoolasí:

package main

import "fmt"
import "strconv"

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

o puede usar fmt.Sprintasí:

package main

import "fmt"

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

o escribe como strconv.FormatBool:

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

fuente
8

Úselo fmt.Sprintf("%v", isExist), como lo haría con casi todos los tipos.

akim
fuente