В Golang для преобразования интерфейса к другому типу используются утверждения типа (type assertions).
Существует две формы утверждения типа:
С проверкой на успешность:
go
Здесь i.(T) пытается преобразовать значение интерфейса i к типу T. s будет содержать преобразованное значение, а ok — булево значение, указывающее на успех преобразования. Это предпочтительный способ, так как он безопасен и позволяет обработать случай, когда преобразование невозможно, без паники.
Без проверки на успешность:
go
Эта форма также пытается преобразовать i к типу T, но в случае неудачи вызывает панику. Использовать ее стоит только если вы абсолютно уверены, что значение интерфейса действительно имеет ожидаемый тип.
Также можно использовать оператор switch с утверждением типа для обработки нескольких возможных типов:
go
В этом случае v внутри каждого case будет иметь статический тип, соответствующий проверяемому типу.
Важно помнить, что:
interface{}) может хранить любое значение, но для доступа к этому значению все равно требуется утверждение типа или switch.