У каких типов можно изменить значения без использования указателя

«У каких типов можно изменить значения без использования указателя» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go можно изменять значения без указателей у следующих типов:

  1. Слайсы (slices) - передаются по ссылке под капотом. Изменения внутри функции видны снаружи:
func modifySlice(s []int) {
    s[0] = 100
}
  1. Мапы (maps) - аналогично слайсам, передаются по ссылке:
func modifyMap(m map[string]int) {
    m["key"] = 42
}
  1. Каналы (channels) - являются ссылочным типом
  2. Функции - передаются по ссылке
  3. Интерфейсы - хранят указатель на данные

Примитивные типы (int, float, bool, string), массивы и структуры требуют указателей для модификации.