bitSet := true
var bitSetVar int8
如何将bitSet
指定为bitSetVar
作为1
我可以这样做:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
这是最好的方式吗?
答案 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 int8
或bitSetVar := 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
,因此我认为这是您所期望的最佳。
就运行时而言,你是:
检查bitSet 的值,这是你应该做的次数最少。
设置您想要执行的bitSetVar 的值。
直到现在,我会说你已经尽可能高效。
就用户可读性而言,如果你觉得这段代码片段使你的代码变得不那么明显,你可以将它转换成一个函数,可以称之为checkBitSetVar,如下所示:
func checkBitSetVar(mybool bool) int8{
if mybool{
return 1
}
return 0 //you just saved youself an else here!
}
并在主要内容中执行:
setBitVar = checkBitSetVar(bitSet)
我认为这是你能走出去的最佳方式。