type golang for float64 datatypes conversion cast types go

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 }

https://play.golang.org/p/eULE6cJO_c0


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.