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

Проверка типа type assertion

Проверка типа (type assertion) в Go используется для извлечения конкретного значения из переменной интерфейсного типа. Она позволяет получить значение, хранящееся в интерфейсе, и проверить, соответствует ли оно определенному типу. Первым параметром выступает переменная интерфейсного типа, а вторым — целевой тип, к которому мы пытаемся привести интерфейс.

Операция проверки типа возвращает извлеченное значение и булев флаг, указывающий на успешность приведения. Если не использовать второй возвращаемый параметр, то в случае неуспешного приведения возникнет паника.

Синтаксис

value, ok := interfaceVar.(TargetType)

Где interfaceVar — переменная интерфейсного типа, TargetType — конкретный тип, к которому мы пытаемся привести, value — извлеченное значение, ok — булев флаг (true если приведение успешно).

Пример

Рассмотрим простой пример успешной проверки типа с использованием формы с проверкой (comma-ok idiom):

package main import "fmt" func main() { var i interface{} = "abcde" if s, ok := i.(string); ok { fmt.Println("String value:", s) } else { fmt.Println("Not a string") } }

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

"String value: abcde"

Пример

Теперь рассмотрим случай, когда приведение типа не удается. В этом случае второй возвращаемый параметр (ok) будет равен false, а значение будет нулевым для целевого типа:

package main import "fmt" func main() { var i interface{} = 12345 if s, ok := i.(string); ok { fmt.Println("String value:", s) } else { fmt.Println("Not a string") } }

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

"Not a string"

Пример

Если не использовать второй возвращаемый параметр (форму без проверки), то в случае неуспешного приведения возникает паника. Это может быть полезно, когда вы точно уверены в типе:

package main import "fmt" func main() { var i interface{} = "abcde" s := i.(string) fmt.Println("String value:", s) }

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

"String value: abcde"

Пример

Пример, который вызовет панику, потому что мы пытаемся привести int к string:

package main func main() { var i interface{} = 12345 _ = i.(string) // panic: interface conversion: interface {} is int, not string }

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

"panic: interface conversion: interface {} is int, not string"

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

  • статью comma-ok idiom,
    которая описывает идиому безопасного приведения типов
  • статью type switch,
    которая позволяет выполнять действия в зависимости от типа интерфейса
  • статью пустой интерфейс,
    который может хранить значения любого типа
  • статью nil-интерфейс,
    которая рассматривает особенности работы с нулевыми интерфейсами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить