В чем разница между пустым интерфейсом `interface{}` и псевдонимом `any` в Go?

Ответ

По сути, разницы нет. any — это псевдоним (type alias) для interface{}, введенный в Go 1.18.

// any является предопределенным идентификатором
// type any = interface{}

Основные моменты:

  • Идентичность: any и interface{} полностью взаимозаменяемы. Компилятор обрабатывает их абсолютно одинаково.
  • Цель введения: any был добавлен для улучшения читаемости кода. Запись any более лаконична и понятна, чем interface{}.
  • Рекомендация: В новом коде, написанном на Go 1.18 и выше, рекомендуется использовать any вместо interface{} для обозначения типа, который может хранить любое значение.

Пример:

// Старый стиль (до Go 1.18)
var a interface{} = "hello"

// Современный стиль (Go 1.18+)
var b any = 42

fmt.Println(a, b) // hello 42

// Они полностью взаимозаменяемы
a = b