Метод reflect.Value.IsValid
Метод IsValid структуры reflect.Value проверяет,
представляет ли значение отражения действительный объект.
Он возвращает true, если значение отражения
соответствует реальному объекту в памяти, и false
в противном случае. Метод не принимает никаких параметров
и возвращает логическое значение.
Синтаксис
reflect.Value.IsValid()
Пример
Давайте проверим валидность значения, полученного
с помощью reflect.ValueOf:
package main
import (
"fmt"
"reflect"
)
func main() {
var x int = 42
v := reflect.ValueOf(x)
res := v.IsValid()
fmt.Println(res)
}
Результат выполнения кода:
true
Пример
Давайте проверим валидность нулевого значения
reflect.Value:
package main
import (
"fmt"
"reflect"
)
func main() {
var v reflect.Value
res := v.IsValid()
fmt.Println(res)
}
Результат выполнения кода:
false
Пример
Давайте проверим валидность значения для несуществующего поля структуры:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
u := User{Name: "John"}
v := reflect.ValueOf(u)
field := v.FieldByName("Age")
res := field.IsValid()
fmt.Println(res)
}
Результат выполнения кода:
false
Пример
Давайте используем IsValid для безопасного доступа
к элементам карты:
package main
import (
"fmt"
"reflect"
)
func main() {
m := map[string]int{"a": 1, "b": 2}
v := reflect.ValueOf(m)
key := reflect.ValueOf("c")
value := v.MapIndex(key)
if value.IsValid() {
fmt.Println("Key exists:", value.Interface())
} else {
fmt.Println("Key does not exist")
}
}
Результат выполнения кода:
"Key does not exist"
Смотрите также
-
метод
reflect.Value.IsNil,
который проверяет, является ли значение нулевым указателем -
метод
reflect.Value.IsZero,
который проверяет, является ли значение нулевым для своего типа -
метод
reflect.Value.Elem,
который возвращает значение, на которое указывает указатель -
метод
reflect.Value.Interface,
который преобразует значение отражения в интерфейс