Для проверки типа переменной во время выполнения используется конструкция type assertion:
value, ok := x.(T)
, где T
— предполагаемый тип, а ok
указывает, совпал ли тип. Также можно использовать type switch: switch v := x.(type) { case int: // действия для int case string: // действия для string default: // другие типы }
.Пакет
reflect
предоставляет механизмы для получения информации о типах переменных во время выполнения.package main
import (
"fmt"
"reflect"
)
func main() {
var x interface{} = 42
// Получаем тип переменной x
t := reflect.TypeOf(x)
fmt.Println("Type:", t)
}
Этот метод позволяет проверить, соответствует ли переменная конкретному типу, и извлечь значение, если это так.
package main
import "fmt"
func main() {
var x interface{} = 42
// Проверка типа и извлечение значения
if val, ok := x.(int); ok {
fmt.Println("x is an int:", val)
} else {
fmt.Println("x is not an int")
}
}
Этот метод удобен, если нужно проверить переменную на соответствие нескольким типам.
package main
import "fmt"
func main() {
var x interface{} = "Hello, World!"
switch v := x.(type) {
case int:
fmt.Println("x is an int:", v)
case string:
fmt.Println("x is a string:", v)
case bool:
fmt.Println("x is a bool:", v)
default:
fmt.Println("x is of unknown type")
}
}
reflect.TypeOf(x)
: Возвращает объект типа reflect.Type
, который содержит информацию о типе переменной x
.x.(int)
: Проверяет, является ли x
переменной типа int
, и возвращает значение и булево значение, указывающее, удалось ли утверждение типа.switch v := x.(type)
: Позволяет проверить переменную x
на соответствие нескольким типам в одном блоке switch
.Ставь 👍 и забирай 📚 Базу знаний