Метод reflect.Value.IsValid

Метод IsValid структуры reflect.Value проверяет, представляет ли значение отражения действительный объект. Он возвращает true, если значение отражения соответствует реальному объекту в памяти, и false в противном случае. Метод не принимает никаких параметров и возвращает логическое значение.

Синтаксис

goreflect.Value.IsValid()

Пример

Давайте проверим валидность значения, полученного с помощью reflect.ValueOf:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var x int = 42
  v := reflect.ValueOf(x)
  res := v.IsValid()
  fmt.Println(res)
}

Результат выполнения кода:

gotrue

Пример

Давайте проверим валидность нулевого значения reflect.Value:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var v reflect.Value
  res := v.IsValid()
  fmt.Println(res)
}

Результат выполнения кода:

gofalse

Пример

Давайте проверим валидность значения для несуществующего поля структуры:

gopackage 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)
}

Результат выполнения кода:

gofalse

Пример

Давайте используем IsValid для безопасного доступа к элементам карты:

gopackage 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")
  }
}

Результат выполнения кода:

go"Key does not exist"

Смотрите также

  • метод reflect.Value.IsNil,
    который проверяет, является ли значение нулевым указателем
  • метод reflect.Value.IsZero,
    который проверяет, является ли значение нулевым для своего типа
  • метод reflect.Value.Elem,
    который возвращает значение, на которое указывает указатель
  • метод reflect.Value.Interface,
    который преобразует значение отражения в интерфейс