Тип reflect.Kind
Тип reflect.Kind представляет собой константу,
которая определяет категорию типа данных в языке Go.
Он используется в пакете reflect для идентификации
базового типа значения во время выполнения программы.
Тип reflect.Kind является перечислением,
которое включает все возможные категории типов,
такие как reflect.Int, reflect.String,
reflect.Struct, reflect.Slice и другие.
Синтаксис
type Kind uint
Для получения значения reflect.Kind используется
метод reflect.Value.Kind или метод
reflect.Type.Kind. Оба метода возвращают
константу типа reflect.Kind, которая
позволяет определить категорию переданного значения.
Пример с типами int и string
Давайте определим категорию типов для целого числа и строки:
package main
import (
"fmt"
"reflect"
)
func main() {
var num int = 42
var str string = "hello"
fmt.Println(reflect.TypeOf(num).Kind())
fmt.Println(reflect.TypeOf(str).Kind())
}
Результат выполнения кода:
"int"
"string"
Пример с пользовательским типом
Давайте посмотрим, как reflect.Kind работает
с пользовательским типом и структурой:
package main
import (
"fmt"
"reflect"
)
type MyInt int
type Person struct {
Name string
Age int
}
func main() {
var myNum MyInt = 10
var p Person
fmt.Println(reflect.TypeOf(myNum).Kind())
fmt.Println(reflect.TypeOf(p).Kind())
}
Результат выполнения кода:
"int"
"struct"
Пример с указателем и срезом
Давайте определим категорию типов для указателя и среза:
package main
import (
"fmt"
"reflect"
)
func main() {
var ptr *int
var slice []int
fmt.Println(reflect.TypeOf(ptr).Kind())
fmt.Println(reflect.TypeOf(slice).Kind())
}
Результат выполнения кода:
"ptr"
"slice"
Пример с проверкой Kind в условном операторе
Давайте проверим категорию типа и выполним разные действия:
package main
import (
"fmt"
"reflect"
)
func processValue(v interface{}) {
val := reflect.ValueOf(v)
switch val.Kind() {
case reflect.Int:
fmt.Printf("Integer: %d\n", val.Int())
case reflect.String:
fmt.Printf("String: %s\n", val.String())
case reflect.Slice:
fmt.Printf("Slice length: %d\n", val.Len())
default:
fmt.Printf("Other kind: %s\n", val.Kind())
}
}
func main() {
processValue(42)
processValue("hello")
processValue([]int{1, 2, 3})
processValue(true)
}
Результат выполнения кода:
"Integer: 42"
"String: hello"
"Slice length: 3"
"Other kind: bool"
Смотрите также
-
тип
reflect.Type,
который представляет информацию о типе во время выполнения -
тип
reflect.Value,
который представляет значение во время выполнения -
метод
reflect.Value.Kind,
который возвращает категорию типа значения -
метод
reflect.Type.Kind,
который возвращает категорию типа