Sobes.tech
Middle+
24

Что происходит при компиляции функции с дженериками?

Компании, где спрашивали
МВидео/эльдорадо

Ответ от нейросети

sobes.tech AI

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

То есть, если у вас есть функция с параметром типа T, и вы вызываете её с int и string, компилятор сгенерирует две версии функции — для int и для string. Это позволяет сохранить типобезопасность и производительность, так как в скомпилированном коде нет обобщённых типов, а только конкретные реализации.

Пример:

func PrintSlice[T any](s []T) {
    for _, v := range s {
        fmt.Println(v)
    }
}

// При вызове PrintSlice([]int{1,2,3}) и PrintSlice([]string{"a", "b"})
// компилятор создаст две версии функции для int и string.

Таким образом, дженерики в Go реализованы через генерацию кода для конкретных типов во время компиляции.