Функция reflect.Zero
Функция reflect.Zero принимает в качестве параметра
тип reflect.Type и возвращает новое значение
reflect.Value, представляющее нулевое значение
для этого типа. Нулевое значение — это значение,
которое присваивается переменной по умолчанию при ее
объявлении без инициализации. Для разных типов данных
нулевое значение имеет свои особенности: для чисел — это 0,
для строк — пустая строка, для указателей — nil и так далее.
Синтаксис
reflect.Zero(typ)
Пример
Давайте создадим нулевое значение для типа int:
package main
import (
"fmt"
"reflect"
)
func main() {
var intType reflect.Type = reflect.TypeOf(0)
val := reflect.Zero(intType)
fmt.Printf("Type: %v, Value: %v, Kind: %v\n",
val.Type(), val.Interface(), val.Kind())
}
Результат выполнения кода:
"Type: int, Value: 0, Kind: int"
Пример
Давайте создадим нулевое значение для типа string:
package main
import (
"fmt"
"reflect"
)
func main() {
var strType reflect.Type = reflect.TypeOf("")
val := reflect.Zero(strType)
fmt.Printf("Type: %v, Value: %q, Kind: %v\n",
val.Type(), val.Interface(), val.Kind())
}
Результат выполнения кода:
"Type: string, Value: "", Kind: string"
Пример
Давайте создадим нулевое значение для слайса:
package main
import (
"fmt"
"reflect"
)
func main() {
sliceType := reflect.TypeOf([]int{})
val := reflect.Zero(sliceType)
fmt.Printf("Type: %v, Value: %v, IsNil: %v\n",
val.Type(), val.Interface(), val.IsNil())
}
Результат выполнения кода:
"Type: []int, Value: [], IsNil: true"
Пример
Давайте создадим нулевое значение для указателя:
package main
import (
"fmt"
"reflect"
)
func main() {
ptrType := reflect.TypeOf(new(int))
val := reflect.Zero(ptrType)
fmt.Printf("Type: %v, IsNil: %v, Value: %v\n",
val.Type(), val.IsNil(), val.Interface())
}
Результат выполнения кода:
"Type: *int, IsNil: true, Value: <nil>"
Пример
Давайте создадим нулевое значение для структуры:
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
structType := reflect.TypeOf(Person{})
val := reflect.Zero(structType)
fmt.Printf("Type: %v, Value: %+v\n",
val.Type(), val.Interface())
}
Результат выполнения кода:
"Type: main.Person, Value: {Name: Age:0}"
Смотрите также
-
функцию
reflect.New,
которая создает новое значение указателя на тип -
функцию
reflect.ValueOf,
которая создает reflect.Value из любого значения -
функцию
reflect.TypeOf,
которая возвращает тип переданного значения -
функцию
reflect.Indirect,
которая возвращает значение, на которое указывает указатель