types - golang - ¿Hay una manera de convertir enteros a bools en go o viceversa?
golang type inference (5)
¿Existe una forma integrada de convertir bools a enteros o viceversa? He intentado el lanzamiento normal, pero como usan diferentes tipos subyacentes, la conversión no es posible de la manera clásica. He revisado algunas de las especificaciones y todavía no he encontrado una respuesta.
Aquí hay un truco para convertir de int
a bool
:
x := 0
newBool := !(x == 0) // returns false
donde x
es la variable int
que desea convertir.
No hay conversions de tipos bool
a enteros o viceversa.
Use el operador de desigualdad para convertir números enteros en valores bool
:
b := i != 0
Use una instrucción if para convertir un bool
a un tipo entero:
var i int
if b {
i = 1
}
Debido a que el valor cero para los tipos de enteros es 0, la rama else que se muestra en otras respuestas no es necesaria.
Sólo para mostrar 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
}
Int to bool es fácil, solo x != 0
hará el truco. Para ir al otro lado, ya que Go no admite un operador ternario, tendrías que hacerlo:
var x int
if b {
x = 1
} else {
x = 0
}
Por supuesto, podrías poner esto en una función:
func Btoi(b bool) int {
if b {
return 1
}
return 0
}
Hay tantas interpretaciones booleanas posibles de enteros, ninguna de ellas necesariamente natural, que tiene sentido decir lo que quieres decir.
En mi experiencia (YMMV), no tiene que hacer esto a menudo si está escribiendo un buen código. A veces es atractivo poder escribir una expresión matemática basada en un booleano, pero sus mantenedores le agradecerán por evitarlo.
var a int = 3
var b bool = a != 0
Acabo de colocar esto en el cuadro de demostración en la página principal de golang :
package main
import "fmt"
func main() {
var a int = 3
var b bool = a != 0
fmt.Println("Hello, 世界", b)
}
Salida:
Hello, 世界 true