ti-enxame.com

Existe uma maneira de converter números inteiros para bools em go ou vice-versa?

Existe uma maneira embutida de converter bools para números inteiros ou vice-versa? Eu tentei a transmissão normal, mas como eles usam tipos subjacentes diferentes, a conversão não é possível da maneira clássica. Examinei algumas das especificações e ainda não encontrei uma resposta.

26
worr

Int bool é fácil, apenas x != 0 fará o truque. Para o contrário, como o Go não suporta um operador ternário, você teria que fazer:

var x int
if b {
    x = 1
} else {
    x = 0
}

É claro que você poderia colocar isso em uma função:

func Btoi(b bool) int {
    if b {
        return 1
    }
    return 0
 }

Existem tantas interpretações booleanas possíveis de números inteiros, nenhuma delas necessariamente natural, que faz sentido ter que dizer o que você quer dizer.

Na minha experiência (YMMV), você não precisa fazer isso frequentemente se estiver escrevendo um bom código. Às vezes, é atraente poder escrever uma expressão matemática baseada em booleano, mas seus mantenedores agradecerão por evitá-la.

32
SteveMcQwark

Aqui está um truque para converter de int para bool:

x := 0
newBool := !(x == 0) // returns false

onde x é a variável int da qual você deseja converter.

6
Sameh Sharaf
var a int = 3
var b bool = a != 0

Eu apenas coloquei isso na caixa de demonstração na página inicial do golang :

package main

import "fmt"

func main() {
 var a int = 3
 var b bool = a != 0
    fmt.Println("Hello, 世界", b)
}

Resultado:

Hello, 世界 true
5
Matt Joiner

Apenas para mostrar o 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_c

3
Vorsprung

Não existem conversões de bool para tipos inteiros ou vice-versa.

Use o operador de desigualdade para converter números inteiros em valores de bool:

b := i != 0

Use uma instrução if para converter um bool em um tipo inteiro:

var i int
if b {
    i = 1
}

Como o valor zero para tipos inteiros é 0, o ramo else mostrado em outras respostas não é necessário.

3
Cerise Limón