如何在 Go 中将布尔值转换为字符串?
Posted
技术标签:
【中文标题】如何在 Go 中将布尔值转换为字符串?【英文标题】:How to convert a bool to a string in Go? 【发布时间】:2016-11-27 21:55:03 【问题描述】:我正在尝试使用string(isExist)
将名为isExist
的bool
转换为string
(true
或false
),但它不起作用。在 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 中将布尔值转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章