bitSet := true
var bitSetVar int8
Wie kann ich bitSet
-bitSetVar
als 1wie bool konvertieren, um INT8 golang
zuweisen kann ich dies tun:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
Ist dies der beste Weg?
bitSet := true
var bitSetVar int8
Wie kann ich bitSet
-bitSetVar
als 1wie bool konvertieren, um INT8 golang
zuweisen kann ich dies tun:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
Ist dies der beste Weg?
Da der Nullwert für eine int8
0
ist, ist der Else-Zweig nicht erforderlich.
bitSet := true
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
Es gibt keine conversions von bool
Typen integer. Die if-Anweisung ist das Beste, was Sie tun können.
In Bezug auf die Speichereffizienz, indem Sie Ihre Ansatz geht
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
tun Sie keine zusätzlichen Variablen nicht verwenden Ihre bitSetVar
zu setzen, daher würde ich sagen, dass dies das Beste ist, man erwarten konnte.
In Bezug auf die Laufzeit, Sie sind:
Überprüfung der Wert von BitSet einmal, die die geringste Anzahl von Malen Sie tun sollten.
Setzen Sie den Wert von bitSetVar einmal, die Sie vorhaben zu tun.
Bis jetzt, würde ich sagen, Sie haben so wirksam wie Sie sein können.
In Bezug auf die Benutzer Lesbarkeit, wenn Sie, dass dieses kleine Code-Snippet fühlen wird Ihr Code nicht weniger ansehnlich zu machen, können Sie es in eine Funktion verschieben könnte, rufen Sie es vielleicht checkBitSetVar, wie folgt aus:
func checkBitSetVar(mybool bool) int8{
if mybool{
return 1
}
return 0 //you just saved youself an else here!
}
und in der Hauptsache:
setBitVar = checkBitSetVar(bitSet)
Ich denke, das ist das Beste, was Sie aus Go bekommen können.
Ihr Weg ist derzeit der beste, weil es schnell ist, mit der gleichen Weise, wie Sie Int8 zu Bool konvertieren können, noch einfacher. Sie können auch 1 Zeile speichern:
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
Go Gemeinschaft hatte ein Problem, diese Umwandlung zu implementieren, aber scheint, dass nicht alle Menschen zustimmen.
ja das ist der beste Weg (schnell und optimiert):
bitSet := true
bitSetVar := int8(0)
if bitSet {
bitSetVar = 1
}
var bitSetVar int8
oder bitSetVar := int8(0)
innerhalb einer Funktion verwendet, ist das gleiche, und Sie brauchen nicht else
Teil, weil die bitSetVar
mit Null initialisiert vor das if
Statement.
während if
mit OK ist (und schnell) wie diese B2i
Funktion:
func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
aber Sie haben eine andere Option map
zu verwenden (nicht so schnell wie if
, aber nett und schön hier zeigen):
var b2i = map[bool]int8{false: 0, true: 1}
wie dieser Arbeitsbeispielcode (mit kommentierten Ausgänge):
package main
import "fmt"
var b2i = map[bool]int8{false: 0, true: 1}
var i2b = []bool{false, true}
func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
func main() {
fmt.Println(B2i(true)) // 1
fmt.Println(B2i(false)) // 0
fmt.Println(b2i[true]) // 1
fmt.Println(b2i[false]) // 0
fmt.Println(i2b[1]) // true
fmt.Println(i2b[0]) // false
}