如何在 Go 中将布尔值转换为字符串?

Posted

技术标签:

【中文标题】如何在 Go 中将布尔值转换为字符串?【英文标题】:How to convert a bool to a string in Go? 【发布时间】:2016-11-27 21:55:03 【问题描述】:

我正在尝试使用string(isExist) 将名为isExistbool 转换为stringtruefalse),但它不起作用。在 Go 中执行此操作的惯用方式是什么?

【问题讨论】:

strconv.FormatBool(t)true 设置为“true”。 strconv.ParseBool("true") 将“真”设置为true。见***.com/a/62740786/12817546。 【参考方案1】:

使用 strconv 包

docs

strconv.FormatBool(v)

func FormatBool(b bool) 字符串 FormatBool 返回“真”或“假” 根据b的值

【讨论】:

【参考方案2】:

两个主要选项是:

    strconv.FormatBool(bool) string 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

【讨论】:

【参考方案3】:

效率不是太大问题,但通用性是,只需使用fmt.Sprintf("%v", isExist),就像对几乎所有类型一样。

【讨论】:

【参考方案4】:

你可以像这样使用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"

【讨论】:

以上是关于如何在 Go 中将布尔值转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 迁移中将字符串转换为布尔值?

如何在 Postgres 中将布尔数组转换为单个布尔值或单个字符串

在javascript中将字符串转换为布尔值[重复]

如何在 Go 中将 int 值转换为字符串?

如何在Go中将字节数组转换为字符串[重复]

如何在Java中将二维布尔数组转换为一维字节数组?