Làm thế nào để chuyển đổi bool thành chuỗi trong Go?


84

Tôi đang cố gắng chuyển đổi một boolđược gọi isExistthành string( truehoặc false) bằng cách sử dụng string(isExist)nhưng nó không hoạt động. Cách thành ngữ để làm điều này trong cờ vây là gì?


strconv.FormatBool(t)để đặt truethành "true". strconv.ParseBool("true")để đặt "true" thành true. Xem stackoverflow.com/a/62740786/12817546 .
Tom L

Câu trả lời:


150

sử dụng gói strconv

tài liệu

strconv.FormatBool(v)

func FormatBool (b bool) string FormatBool trả về "true" hoặc "false"
theo giá trị của b


20

Hai tùy chọn chính là:

  1. strconv.FormatBool(bool) string
  2. fmt.Sprintf(string, bool) stringvới "%t"hoặc bộ "%v"định dạng.

Lưu ý rằng strconv.FormatBool(...)đáng kể nhanh hơn fmt.Sprintf(...), thể hiện qua các tiêu chuẩn sau đây:

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

Chạy như:

$ 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

bạn có thể sử dụng strconv.FormatBoolnhư thế này:

package main

import "fmt"
import "strconv"

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

hoặc bạn có thể sử dụng fmt.Sprintnhư thế này:

package main

import "fmt"

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

hoặc viết như 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

Chỉ cần sử dụng fmt.Sprintf("%v", isExist), như bạn sẽ làm cho hầu hết các loại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.