如何在golang中将bool转换为int8

时间:2016-07-28 04:24:28

标签: go casting type-conversion

bitSet := true
var bitSetVar int8

如何将bitSet指定为bitSetVar作为1

我可以这样做:

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

这是最好的方式吗?

4 个答案:

答案 0 :(得分:18)

由于int8的零值为0,因此不需要其他分支。

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

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

答案 1 :(得分:3)

是的,这是最好的方式(快速和优化):

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

在函数内使用var bitSetVar int8bitSetVar := int8(0)是相同的,并且您不需要else部分,因为bitSetVar在{{1}之前初始化为零}} statment。
使用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}

答案 2 :(得分:1)

目前你的方式是最好的,因为它的速度很快,你可以将int8转换为bool,就更容易了。您还可以保存1行:

var bitSetVar int8
if bitSet {
   bitSetVar = 1
}

Go社区在实施此转换方面存在问题,但似乎并非所有人都同意。

答案 3 :(得分:0)

就记忆效率而言,按照你的做法进行

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

您没有使用任何额外的变量来设置bitSetVar,因此我认为这是您所期望的最佳。

就运行时而言,你是:

  1. 检查bitSet 的值,这是你应该做的次数最少。

  2. 设置您想要执行的bitSetVar 的值

  3. 直到现在,我会说你已经尽可能高效。

    就用户可读性而言,如果你觉得这段代码片段使你的代码变得不那么明显,你可以将它转换成一个函数,可以称之为checkBitSetVar,如下所示:

    func checkBitSetVar(mybool bool) int8{
        if mybool{
            return 1
        }
        return 0    //you just saved youself an else here!
    }
    

    并在主要内容中执行:

    setBitVar = checkBitSetVar(bitSet)
    

    我认为这是你能走出去的最佳方式。