Метод reflect.Value.SetBool
Метод reflect.Value.SetBool устанавливает новое логическое значение
для переменной, представленной объектом reflect.Value. В первый
параметр метод принимает значение типа bool, которое будет
присвоено переменной. Для успешной установки значения необходимо,
чтобы переменная была адресуемой (CanSet возвращает true)
и имела тип bool, иначе метод вызовет панику.
Синтаксис
func (v Value) SetBool(x bool)
Пример
Давайте создадим переменную типа bool и изменим ее значение
с помощью метода SetBool:
package main
import (
"fmt"
"reflect"
)
func main() {
var isActive bool = true
fmt.Println("Before:", isActive)
v := reflect.ValueOf(&isActive).Elem()
v.SetBool(false)
fmt.Println("After:", isActive)
}
Результат выполнения кода:
"Before: true"
"After: false"
Пример
Метод SetBool также работает с полями структур. Изменим
значение поля типа bool в структуре:
package main
import (
"fmt"
"reflect"
)
type Config struct {
Enabled bool
Active bool
}
func main() {
cfg := Config{Enabled: true, Active: false}
fmt.Println("Before:", cfg)
v := reflect.ValueOf(&cfg).Elem()
field := v.FieldByName("Enabled")
field.SetBool(false)
fmt.Println("After:", cfg)
}
Результат выполнения кода:
"Before: {true false}"
"After: {false false}"
Пример
Важно проверять возможность установки значения с помощью метода
CanSet перед вызовом SetBool, чтобы избежать паники:
package main
import (
"fmt"
"reflect"
)
func main() {
var flag bool = true
v := reflect.ValueOf(flag)
if v.CanSet() {
v.SetBool(false)
} else {
fmt.Println("Cannot set value (it's not addressable)")
}
fmt.Println("Flag:", flag)
// Правильный способ - передача указателя
vPtr := reflect.ValueOf(&flag).Elem()
if vPtr.CanSet() {
vPtr.SetBool(false)
}
fmt.Println("Flag after proper set:", flag)
}
Результат выполнения кода:
"Cannot set value (it's not addressable)"
"Flag: true"
"Flag after proper set: false"
Смотрите также
-
функцию
reflect.ValueOf,
которая создаетreflect.Valueиз интерфейса -
метод
reflect.Value.CanSet,
который проверяет возможность изменения значения -
метод
reflect.Value.SetInt,
который устанавливает целочисленное значение -
метод
reflect.Value.SetString,
который устанавливает строковое значение