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

Метод reflect.Value.IsZero

Метод reflect.Value.IsZero проверяет, является ли значение, хранящееся в reflect.Value, нулевым для своего типа. Он возвращает true, если значение соответствует нулевому значению своего типа (например, 0 для чисел, "" для строк, nil для указателей, срезов, карт, каналов и функций, а также пустые структуры и массивы, все элементы которых равны нулю). В противном случае возвращается false. Этот метод особенно полезен при работе с интерфейсами и динамической типизацией, когда необходимо определить, было ли значение явно установлено или осталось нулевым.

Синтаксис

v.IsZero() bool

Метод не принимает параметров и возвращает логическое значение bool.

Пример с числовыми типами

Давайте проверим нулевое состояние для целочисленных значений:

package main import ( "fmt" "reflect" ) func main() { var zeroInt int = 0 var nonZeroInt int = 42 v1 := reflect.ValueOf(zeroInt) v2 := reflect.ValueOf(nonZeroInt) fmt.Println(v1.IsZero()) fmt.Println(v2.IsZero()) }

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

true false

Пример со строковыми типами

Проверим нулевое состояние для строк:

package main import ( "fmt" "reflect" ) func main() { var emptyStr string = "" var nonEmptyStr string = "hello" v1 := reflect.ValueOf(emptyStr) v2 := reflect.ValueOf(nonEmptyStr) fmt.Println(v1.IsZero()) fmt.Println(v2.IsZero()) }

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

true false

Пример с указателями и интерфейсами

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

package main import ( "fmt" "reflect" ) func main() { var ptr *int = nil var slice []int = nil var iface interface{} = nil vPtr := reflect.ValueOf(ptr) vSlice := reflect.ValueOf(slice) vIface := reflect.ValueOf(iface) fmt.Println(vPtr.IsZero()) fmt.Println(vSlice.IsZero()) fmt.Println(vIface.IsZero()) }

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

true true true

Пример со структурой и массивом

Для структур и массивов нулевым считается значение, все поля которого находятся в нулевом состоянии:

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { var emptyPerson Person var nonEmptyPerson = Person{Name: "Alice", Age: 30} var zeroArray [2]int v1 := reflect.ValueOf(emptyPerson) v2 := reflect.ValueOf(nonEmptyPerson) v3 := reflect.ValueOf(zeroArray) fmt.Println(v1.IsZero()) fmt.Println(v2.IsZero()) fmt.Println(v3.IsZero()) }

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

true false true

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

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