РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1503 of 1593 menu

Метод reflect.Value.IsNil

Метод reflect.Value.IsNil проверяет, является ли значение, хранящееся в reflect.Value, нулевым указателем. Он возвращает true, если значение равно nil, и false в противном случае. Метод работает только для типов, которые могут быть nil: указатели, каналы, функции, интерфейсы, карты и срезы. Для других типов вызов метода вызовет панику.

Синтаксис

reflect.ValueOf(v).IsNil()

Пример

Давайте проверим, является ли нулевой указатель nil:

package main import ( "fmt" "reflect" ) func main() { var p *int val := reflect.ValueOf(p) res := val.IsNil() fmt.Println(res) }

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

true

Пример

Давайте проверим, является ли инициализированный указатель nil:

package main import ( "fmt" "reflect" ) func main() { num := 42 p := &num val := reflect.ValueOf(p) res := val.IsNil() fmt.Println(res) }

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

false

Пример

Давайте проверим, является ли нулевой срез nil:

package main import ( "fmt" "reflect" ) func main() { var s []int val := reflect.ValueOf(s) res := val.IsNil() fmt.Println(res) }

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

true

Пример

Давайте проверим, является ли пустой срез nil:

package main import ( "fmt" "reflect" ) func main() { s := []int{} val := reflect.ValueOf(s) res := val.IsNil() fmt.Println(res) }

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

false

Пример

Давайте проверим, является ли нулевая карта nil:

package main import ( "fmt" "reflect" ) func main() { var m map[string]int val := reflect.ValueOf(m) res := val.IsNil() fmt.Println(res) }

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

true

Важное замечание

Метод IsNil вызывает панику, если вызвать его на значении типа, который не может быть nil. Например, на числе или строке. Перед вызовом IsNil рекомендуется проверять допустимость значения с помощью метода IsValid и проверять тип с помощью Kind.

package main import ( "fmt" "reflect" ) func main() { var num int val := reflect.ValueOf(num) // Проверяем, что значение допустимо и может быть nil if val.IsValid() { kind := val.Kind() if kind == reflect.Ptr || kind == reflect.Slice || kind == reflect.Map || kind == reflect.Chan || kind == reflect.Func || kind == reflect.Interface { res := val.IsNil() fmt.Println(res) } else { fmt.Println("Value cannot be nil") } } }

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

"Value cannot be nil"

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

  • метод reflect.Value.IsValid,
    который проверяет, содержит ли reflect.Value допустимое значение
  • метод reflect.Value.IsZero,
    который проверяет, является ли значение нулевым для своего типа
  • метод reflect.Value.Kind,
    который возвращает тип значения, хранящегося в reflect.Value
  • функцию reflect.ValueOf,
    которая создает reflect.Value из переданного значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить