Интерфейсы в Go: процесс создания itab и itabTable
Давай посмотрим на процесс создания itab и itabTable.
Рассмотрим приведенный ниже блок кода, в котором происходит преобразование типов между интерфейсом и структурой.
Этот блок инициирует преобразование типа кода среды выполнения, и во время этого процесса будет вызываться метод getitab. То есть getitab сначала ищет информацию в itabTable, если информации там нет, он создает новый itab и сохраняет его в itabTable для будущей проверки.
На рисунке ниже показано, как устроен itab.
Как видим, среда выполнения Go будет сканировать интерфейс и структуру, чтобы извлечь определения их методов, а затем просто сравнить их, чтобы увидеть, совпадают ли они. Если сигнатуры методов совпадают, можно сказать, что структура реализует интерфейс. Внимание: структура используется как пример, у любого типа могут быть методы.
Процесс одинаков для преобразования типов, происходящего как во время компиляции, так и во время выполнения.
Чтобы подро__б__нее узнать как происходит провер__ка, лучше всего начать с метода getitab на сайте Golang.
Для тех, кто хочет отладить среду выполнения Go, приведенный ниже фрагмент — это код, использованный для печати информации itabTable в целях отладки.
И вот как можно распечатать itabTable.
Итак, это краткий обзор того, как хранятся значения интерфейса и как работает преобразование интерфейса во время выполнения. В среде выполнения Go еще много интересного!