Skip to content

Интерфейсы в Go: процесс создания itab и itabTable

Давай посмотрим на процесс создания itab и itabTable.

Рассмотрим приведенный ниже блок кода, в котором происходит преобразование типов между интерфейсом и структурой.

Этот блок инициирует преобразование типа кода среды выполнения, и во время этого процесса будет вызываться метод getitab. То есть getitab сначала ищет информацию в itabTable, если информации там нет, он создает новый itab и сохраняет его в itabTable для будущей проверки.

На рисунке ниже показано, как устроен itab.

Как видим, среда выполнения Go будет сканировать интерфейс и структуру, чтобы извлечь определения их методов, а затем просто сравнить их, чтобы увидеть, совпадают ли они. Если сигнатуры методов совпадают, можно сказать, что структура реализует интерфейс. Внимание: структура используется как пример, у любого типа могут быть методы.

Процесс одинаков для преобразования типов, происходящего как во время компиляции, так и во время выполнения.

Чтобы подро__б__нее узнать как происходит провер__ка, лучше всего начать с метода getitab на сайте Golang.

Для тех, кто хочет отладить среду выполнения Go, приведенный ниже фрагмент — это код, использованный для печати информации itabTable в целях отладки.

И вот как можно распечатать itabTable.

Итак, это краткий обзор того, как хранятся значения интерфейса и как работает преобразование интерфейса во время выполнения. В среде выполнения Go еще много интересного!