как конвертировать bool в int8 в golang [дубликат]
этот вопрос уже есть ответ здесь:
bitSet := true
var bitSetVar int8
как я могу назначить bitSet
to bitSetVar
в 1
Я могу сделать это:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
Это лучший способ?
4 ответов
потому что нулевое значение для int8
is 0
, ветка else не нужна.
bitSet := true
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
нет преобразование С bool
к целочисленным типам. Оператор if-лучшее, что вы можете сделать.
да это самый лучший способ (быстрый и оптимизированный):
bitSet := true
bitSetVar := int8(0)
if bitSet {
bitSetVar = 1
}
используя var bitSetVar int8
или bitSetVar := int8(0)
внутри функции то же самое, и вам не нужно else
часть, потому что bitSetVar
инициализируется нулем, до этого if
statment.
при использовании if
в порядке (и быстро), как это B2i
функция:
func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
но у вас есть другой вариант, используя map
тоже (не так быстро, как if
, но приятно и красиво показать здесь):
var b2i = map[bool]int8{false: 0, true: 1}
как этот рабочий пример кода (с прокомментированными выходами):
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
}
ваш путь в настоящее время является лучшим, потому что это быстро, так же, как вы можете конвертировать int8 в bool, еще проще. Также вы можете сохранить 1 строчку:
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
у сообщества Go была проблема с реализацией этого преобразования, но, похоже, не все люди согласны.
С точки зрения эффективности памяти, судя по вашему подходу к ведению
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
вы не используете никаких дополнительных переменных для установки вашего bitSetVar
, поэтому я бы сказал, что это лучшее, что вы могли ожидать.
С точки зрения времени выполнения, вы находитесь:
проверка значения bitSet после, что является наименьшим количеством раз, когда вы должны делать.
установка значения bitSetVar после, что вы и намерены сделать.
до, я бы сказал, что вы были настолько эффективны, насколько это возможно.
С точки зрения читаемости пользователя, если вы чувствуете, что этот маленький фрагмент кода делает ваш код менее презентабельным, вы можете перенести его в функцию, возможно, назовите ее checkBitSetVar, например:
func checkBitSetVar(mybool bool) int8{
if mybool{
return 1
}
return 0 //you just saved youself an else here!
}
и в основном, сделайте:
setBitVar = checkBitSetVar(bitSet)
Я думаю, что это лучшее, что вы можете получить от Go.