今天写代码,发现bool
不能直接强转成int
,这就导致如下代码编译错误
type Status int
const StatusSuccess Status = 1
...
status := StatusSuccess
succ += int(status == StatusSuccess)
这种在其他语言,例如 c++看起来非常自然的强转为啥 golang 不支持呢?
于是开始 Google,搜到这篇博客,作者用了 7 中方法实现 bool 转 int ,这里摘抄几个。
func boolToInt(b bool) int {
if b {
return 1
}
return 0
}
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
}
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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.