bitSet := true
var bitSetVar int8
Jak mogę przypisać bitSet
do bitSetVar
jako 1jak konwertować bool do int8 w golang
mogę to zrobić:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
Jest to najlepszy sposób?
bitSet := true
var bitSetVar int8
Jak mogę przypisać bitSet
do bitSetVar
jako 1jak konwertować bool do int8 w golang
mogę to zrobić:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
Jest to najlepszy sposób?
Ponieważ wartość zerowa dla int8
to 0
, gałąź else nie jest konieczna.
bitSet := true
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
Nie ma conversions z bool
do całkowitych typów. Instrukcja if jest najlepsza, co możesz zrobić.
Pod względem wydajności pamięci, idąc za swoim podejściu robi
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
nie używasz żadnych dodatkowych zmiennych aby ustawić bitSetVar
, stąd chciałbym powiedzieć, że to najlepsze co można się spodziewać.
Pod względem czasu wykonywania jesteś:
Sprawdzanie wartości bitSet raz, która jest co najmniej kilka razy należy robić.
Ustawienie wartości bitSetVar po wykonaniu, którą zamierzasz wykonać.
dotychczas, chciałbym powiedzieć, że nie były tak skuteczne, jak można być.
Pod względem czytelności użytkownika, jeśli czujesz, że ten mały fragment kodu czyni kod mniej reprezentacyjny, można przesunąć go do funkcji, może nazwać checkBitSetVar, tak:
func checkBitSetVar(mybool bool) int8{
if mybool{
return 1
}
return 0 //you just saved youself an else here!
}
i zasadniczo:
setBitVar = checkBitSetVar(bitSet)
Myślę, że to najlepsze, co można wydostać z Go.
Twoja droga jest obecnie najlepsza, ponieważ jest szybka, z tym samym sposobem, w jaki można zamienić int8 na bool, jeszcze łatwiej. Możesz również zapisać 1 linię:
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
Społeczność, do której doszło, miała problem z wdrożeniem tej konwersji, ale wydaje się, że nie wszyscy ludzie się z tym zgadzają.
tak jest to najlepszy sposób (szybki i zoptymalizowany):
bitSet := true
bitSetVar := int8(0)
if bitSet {
bitSetVar = 1
}
użyciu var bitSetVar int8
lub bitSetVar := int8(0)
wewnątrz funkcji jest taka sama i nie trzeba else
rolę, ponieważ bitSetVar
wartość zero, zanim ta informacja o if
.
podczas korzystania if
jest OK (i szybko) jak to B2i
funkcję:
func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
ale masz inną opcję przy map
zbyt (nie tak szybko, jak if
, ale ładne i piękne, aby zobaczyć tutaj):
var b2i = map[bool]int8{false: 0, true: 1}
jak kod próbki pracy (z skomentowanych wyjść):
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
}