如何在golang中将bool转换为int8

新手上路,请多包涵
bitSet := true
var bitSetVar int8

我如何将 bitSet 分配给 bitSetVar 作为 1

我可以做这个:

 if bitSet {
   bitSetVar = 1
} else {
   bitSetVar = 0
}

这是最好的方法吗?

原文由 Shahriar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

因为 int8 的零值是 0 ,所以不需要 else 分支。

 bitSet := true
var bitSetVar int8
if bitSet {
   bitSetVar = 1
}

没有从 bool 到整数类型的 转换。 if 语句是你能做的最好的。

原文由 Cerise Limón 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,这是最好的方法(快速且优化):

 bitSet := true
bitSetVar := int8(0)
if bitSet {
    bitSetVar = 1
}

using var bitSetVar int8 or bitSetVar := int8(0) inside a function is the same, and you don’t need else part, because the bitSetVar initialized with zero在此之前 if 声明。

使用 if 可以(并且快速)像这样 B2i 函数:

 func B2i(b bool) int8 {
    if b {
        return 1
    }
    return 0
}

但是你还有另一个选择使用 map 也(没有 if 快,但在这里展示的很好很漂亮):

 var b2i = map[bool]int8{false: 0, true: 1}

像这个工作示例代码(带有注释输出):

 package main

import "fmt"

var b2i = map[bool]int8{false: 0, true: 1}

var i2b = []bool{false, true}

func B2i(b bool) int8 {
    if b {
        return 1
    }
    return 0
}
func main() {
    fmt.Println(B2i(true))  // 1
    fmt.Println(B2i(false)) // 0

    fmt.Println(b2i[true])  // 1
    fmt.Println(b2i[false]) // 0

    fmt.Println(i2b[1]) // true
    fmt.Println(i2b[0]) // false
}

原文由 user6169399 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题