Go. Пустой интерфейс

Кратко о пустом интерфейсе в Go
Кратко о пустом интерфейсе в Go

В языке Go есть т. н. «пустой» интерфейс interface{}. Он не содержит в себе никаких методов, описывающих поведение программной сущности.

А это значит, что любое значение может быть приведено к типу interface{}.

Это несет в себе колоссальные возможности и опасность…

Где использовать?

Пустой интерфейс используется, когда заранее неизвестен тип данных.

1. Например, когда в вызываемую функцию нужно передать аргумент неопределенного типа данных, в ее сигнатуре можно указать, как параметр функции, пустой интерфейс:

// OneFunc — функция может принимать значение любого типа, которое затем возможно обработать внутри ее тела функции

func OneFunc(arg interface{}) {
// …
}

2. Чтобы создавать универсальные типы данных.

Универсальные типы данных могут хранить значения разных типов.

Для примера, создадим пустой срез(слайс) типа []interface{}:

package main import "fmt" func main() { var slice []interface{} slice = append(slice, 8, "Привет!", 10.0, true) fmt.Printf("Адрес среза(слайса): %p\nЗначения: %+v\nТип: %T\n", slice, slice, slice) }

ВАЖНО!

Будьте очень осторожны в практике применения пустых интерфейсов - они не дают гарантии типов данных, которые хранятся или передаются внутри них!
Для безопасности, лучше используйте типизированные интерфейсы.

Статья написана для проекта Go & Rust для красивых и не серьезных.
С уважением, Вячеслав "Marpa" Шаров (Marpa3D)

Начать дискуссию