How to convert a bool to a string in Go?

前端 未结 4 882
萌比男神i
萌比男神i 2020-12-15 02:07

I am trying to convert a bool called isExist to a string (true or false) by using string(isExist)

相关标签:
4条回答
  • 2020-12-15 02:47

    Just use fmt.Sprintf("%v", isExist), as you would for almost all the types.

    0 讨论(0)
  • 2020-12-15 02:49

    use the strconv package

    docs

    strconv.FormatBool(v)

    func FormatBool(b bool) string FormatBool returns "true" or "false"
    according to the value of b

    0 讨论(0)
  • 2020-12-15 02:50

    you may use strconv.FormatBool like this:

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

    or you may use fmt.Sprint like this:

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

    or write like strconv.FormatBool:

    // FormatBool returns "true" or "false" according to the value of b
    func FormatBool(b bool) string {
        if b {
            return "true"
        }
        return "false"
    }
    
    0 讨论(0)
  • 2020-12-15 02:51

    The two main options are:

    1. strconv.FormatBool(bool) string
    2. 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
    
    0 讨论(0)
提交回复
热议问题