引言
今天写代码,发现bool 不能直接强转成int ,这就导致如下代码编译错误
type Status int
const StatusSuccess Status = 1
...
status := StatusSuccess
succ += int(status == StatusSuccess)
这种在其他语言,例如 c++看起来非常自然的强转为啥 golang 不支持呢?
第二个问题
于是开始 Google,搜到这篇博客,作者用了 7 中方法实现 bool 转 int ,这里摘抄几个。
方法 1
func boolToInt(b bool) int {
if b {
return 1
}
return 0
}
方法 2
func Bool2int(b bool) int {
// The compiler currently only optimizes this form.
// See issue 6011.
var i int
if b {
i = 1
} else {
i = 0
}
return i
}
方法 7
func fastBoolConv(b bool) int {
return int(*(*byte)(unsafe.Pointer(&b)))
}
性能对比
way 1 6449ms
way 2 2868ms
way 3 6378ms
way 6 7268ms
way 7 2987ms
尝试去看方法 2 为啥比方法 1 快,但是没有看懂,有大佬能解释下吗,issue 6011
|