【问题标题】:how to convert bool to int8 in golang [duplicate]如何在golang中将bool转换为int8 [重复]
【发布时间】:2016-12-02 07:08:26
【问题描述】:
bitSet := true
var bitSetVar int8

如何将bitSet 分配给bitSetVar 作为1

我可以这样做:

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

这是最好的方法吗?

【问题讨论】:

标签: go casting type-conversion


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    在内存效率方面,按照你的做法来做

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

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

    就运行时而言,您是:

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

    2. 设置bitSetVar的值一次,你打算这样做。

    到目前为止,我会说你已经尽可能高效了。

    在用户可读性方面,如果你觉得这个小sn-p代码让你的代码变得不那么美观,你可以把它转换成一个函数,也许叫它checkBitSetVar,像这样:

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

    主要是这样做:

    setBitVar = checkBitSetVar(bitSet)
    

    我认为这是你可以从 Go 中得到的最好的结果。

    【讨论】:

    • 好答案。我特别喜欢你使用“检查”和“设置”这两个词。 bool 类型没有“转换”。见@MuffinTop。
    【解决方案3】:

    目前你的方法是最好的,因为它很快,用同样的方法你可以将 int8 转换为 bool,甚至更容易。您也可以保存 1 行:

    var bitSetVar int8
    if bitSet {
       bitSetVar = 1
    }
    

    Go 社区在实现此转换时遇到了问题,但似乎并非所有人都同意。

    【讨论】:

      【解决方案4】:

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

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

      在函数中使用var bitSetVar int8 或bitSetVar := int8(0) 是相同的,并且您不需要else 部分,因为bitSetVar 在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
      }
      

      【讨论】:

        猜你喜欢
        • 2023-02-06
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 2015-10-07
        • 1970-01-01
        相关资源
        最近更新 更多