🟡 Средний · 2 очк. Разное / продвинутое
Скомпилируется ли: func Log(args ...any) {}; names := []string{"a","b"}; Log(names...)?
A Да, слайс развернется в аргументы
B Нет: []string нельзя передать как ...any; нужен явный []any или передача поэлементно
C Да, но только с Go 1.21+
D Ошибка выполнения
Объяснение вопроса

В Go []string и []any - разные типы, даже несмотря на то, что string удовлетворяет any. Развернуть []string через ... в параметр ...any нельзя:

func Log(args ...any) { fmt.Println(args...) }

names := []string{"alice", "bob"}

// Не компилируется:
// Log(names...)  // cannot use names ([]string) as []any

// Решение 1: передать слайс как один аргумент
Log(names)  // args = []any{[]string{"alice","bob"}}

// Решение 2: явная конвертация
anySlice := make([]any, len(names))
for i, v := range names {
    anySlice[i] = v
}
Log(anySlice...)  // args = []any{"alice", "bob"}

// Решение 3: передать поэлементно
Log("alice", "bob")  // OK

Причина: Go не выполняет неявную конвертацию слайсов. []string и []any имеют разный layout в памяти (string - 16 байт, any/interface - 16 байт с другой структурой).

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.