Як перетворити bool на рядок у Go?


84

Я намагаюся перетворити boolвикликаний isExistв string( trueабо false) за допомогою, string(isExist)але це не працює. Який ідіоматичний спосіб зробити це в Go?


strconv.FormatBool(t)встановити trueна “true”. strconv.ParseBool("true")встановити для “true” значення true. Див. Stackoverflow.com/a/62740786/12817546 .
Том Л

Відповіді:


150

використовуйте пакет strconv

документи

strconv.FormatBool(v)

func FormatBool (b bool) рядок FormatBool повертає "true" або "false"
відповідно до значення b


20

Два основні варіанти:

  1. strconv.FormatBool(bool) string
  2. fmt.Sprintf(string, bool) stringза допомогою форматорів "%t"або "%v".

Зауважте, що strconv.FormatBool(...)це значно швидше, ніж fmt.Sprintf(...)це демонструють наступні тести:

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

Запустити як:

$ 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

8

Ви можете використовувати strconv.FormatBoolтак:

package main

import "fmt"
import "strconv"

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

або ви можете використовувати fmt.Sprintтак:

package main

import "fmt"

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

або напишіть як strconv.FormatBool:

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

8

Просто використовуйте fmt.Sprintf("%v", isExist), як для майже всіх типів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.