Как преобразовать bool в строку в Go?

93

Я пытаюсь преобразовать boolвызываемый isExistобъект в string( trueили false) с помощью, string(isExist)но это не работает. Какой идиоматический способ сделать это в Go?

Каспер
источник
strconv.FormatBool(t)установить trueв «истину». strconv.ParseBool("true")установить значение «истина» true. См. Stackoverflow.com/a/62740786/12817546 .
Tom L

Ответы:

164

используйте пакет strconv

документы

strconv.FormatBool(v)

func FormatBool (b bool) string FormatBool возвращает «истина» или «ложь» в
соответствии со значением b

Бррр
источник
24

Два основных варианта:

  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
maerics
источник
9

вы можете использовать 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"
}

источник
9

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

аким
источник