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