Jak przekonwertować bool na string w Go?

93

Próbuję przekonwertować boolwywołanie isExistna string( truelub false) za pomocą, string(isExist)ale to nie działa. Jaki jest idiomatyczny sposób na zrobienie tego w Go?

Kacper
źródło
strconv.FormatBool(t)ustawić truena „prawda”. strconv.ParseBool("true")ustawić „prawda” na true. Zobacz stackoverflow.com/a/62740786/12817546 .
Tom L

Odpowiedzi:

164

użyj pakietu strconv

dokumenty

strconv.FormatBool(v)

func FormatBool (b bool) string FormatBool zwraca „true” lub „false”
zgodnie z wartością b

Brrrr
źródło
24

Dwie główne opcje to:

  1. strconv.FormatBool(bool) string
  2. fmt.Sprintf(string, bool) stringz elementami formatującymi "%t"lub "%v".

Zwróć uwagę, że strconv.FormatBool(...)jest to znacznie szybsze niż fmt.Sprintf(...)wykazano w następujących testach porównawczych:

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

Uruchom jako:

$ 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
źródło
9

możesz użyć w strconv.FormatBoolten sposób:

package main

import "fmt"
import "strconv"

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

lub możesz użyć w fmt.Sprintten sposób:

package main

import "fmt"

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

lub napisz jak strconv.FormatBool:

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

źródło
9

Po prostu użyj fmt.Sprintf("%v", isExist), tak jak w przypadku prawie wszystkich typów.

akim
źródło