Ответ
По сути, разницы нет. 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