🤔 Как проверить тип переменной в среде выполнения?



Для проверки типа переменной во время выполнения используется конструкция type assertion: value, ok := x.(T), где T — предполагаемый тип, а ok указывает, совпал ли тип. Также можно использовать type switch: switch v := x.(type) { case int: // действия для int case string: // действия для string default: // другие типы }.



🟠Пакета `reflect`

Пакет reflect предоставляет механизмы для получения информации о типах переменных во время выполнения.

package main



import (

"fmt"

"reflect"

)



func main() {

var x interface{} = 42



// Получаем тип переменной x

t := reflect.TypeOf(x)

fmt.Println("Type:", t)

}




🟠`type assertion` (утверждения типа)

Этот метод позволяет проверить, соответствует ли переменная конкретному типу, и извлечь значение, если это так.

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")

}

}




🟠`type switch` (оператор switch для типов)

Этот метод удобен, если нужно проверить переменную на соответствие нескольким типам.

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`:

reflect.TypeOf(x): Возвращает объект типа reflect.Type, который содержит информацию о типе переменной x.

🟠Type assertion:

x.(int): Проверяет, является ли x переменной типа int, и возвращает значение и булево значение, указывающее, удалось ли утверждение типа.

🟠Type switch:

switch v := x.(type): Позволяет проверить переменную x на соответствие нескольким типам в одном блоке switch.



Ставь 👍 и забирай 📚 Базу знаний