是否有内置方法将bool转换为整数,反之亦然?我尝试过普通的转换,但由于它们使用不同的底层类型,转换是不可能的经典方式。我已经倾注了一些规范,但我还没有找到答案。
答案 0 :(得分:32)
Int to bool很容易,只需x != 0
即可。换句话说,由于Go不支持三元运算符,您必须这样做:
var x int
if b {
x = 1
} else {
x = 0
}
你当然可以把它放在一个函数中:
func Btoi(b bool) int {
if b {
return 1
}
return 0
}
对于整数有很多可能的布尔解释,它们都不一定是自然的,有必要说出你的意思。
根据我的经验(YMMV),如果您正在编写好的代码,则不必经常这样做。有时候它很有吸引力,能够根据布尔值编写数学表达式,但是你的维护者会感谢你避免使用它。
答案 1 :(得分:6)
以下是从int
转换为bool
的技巧:
x := 0
newBool := !(x == 0) // returns false
其中x
是您要转换的int
变量。
答案 2 :(得分:5)
var a int = 3
var b bool = a != 0
我刚把它放到demo box上的golang front page:
package main
import "fmt"
func main() {
var a int = 3
var b bool = a != 0
fmt.Println("Hello, 世界", b)
}
输出:
Hello, 世界 true
答案 3 :(得分:2)
从bool
到整数类型都没有conversions,反之亦然。
使用inequality运算符将整数转换为bool
值:
b := i != 0
使用if语句将bool
转换为整数类型:
var i int
if b {
i = 1
}
因为整数类型的零值为0,所以不需要其他答案中所示的else分支。
答案 4 :(得分:2)
仅显示TMTOWTDT
package main
import (
"fmt"
"unsafe"
)
func main() {
fmt.Println(bool2int(true))
fmt.Println(bool2int(false))
}
func bool2int(a bool) uint64 {
return *(*uint64)(unsafe.Pointer(&a))&1
}
答案 5 :(得分:0)
要设置布尔类型的数字类型,最好使用if
语句。请参阅@MuffinTop非常好的答案和https://stackoverflow.com/a/38627381/12817546。从布尔值设置布尔值和字符串类型时也是如此。
package main
import (
. "fmt"
. "strconv"
)
func main() {
var e []interface{}
t := true
if t {
by := []byte{'G', 'o'}
r := []rune{rune(by[0]), 111}
f := 70.99
s := Sprintf("%.f", f)
i, _ := Atoi(s) // Atoi "ASCII to integer"
bo := !(t == true)
// var bo bool = t != true
e = []interface{}{by[0], r[0], f, s, i, bo}
}
checkType(e)
}
func checkType(s []interface{}) {
for k, _ := range s {
// uint8 71, int32 71, float64 70.99, string 71, int 71, bool false
Printf("%T %v\n", s[k], s[k])
}
}
您可以像{SamehShara所说的那样使用bo := !(t == true)
或像@MattJoiner所说的那样使用var bo bool = t != true
来设置布尔值。这里,t
值为true
的布尔值被设置为bo
值为false
的布尔值。
要通过true
或false
布尔值设置“ true”或“ false”字符串,请使用fmt.Sprintf("%v", t)
。参见https://stackoverflow.com/a/47413424/12817546。 strconv.ParseBool("true")
反之。参见https://stackoverflow.com/a/53093945/12817546。行情已编辑。
答案 6 :(得分:0)
你可以使用地图:
package main
var (
isZero = map[int]bool{0: true}
intVal = map[bool]int{true: 1}
)
func main() {
println(isZero[-2]) // false
println(isZero[-1]) // false
println(isZero[0]) // true
println(isZero[1]) // false
println(isZero[2]) // false
println(intVal[false]) // 0
println(intVal[true]) // 1
}