Указатели в Go: отличия от C/C++

К вопросам
Легкий
Language Features

Вопрос

Как работают указатели в Go? Чем они отличаются от указателей в C/C++? Что такое escape analysis?

Ответ

Указатели в Go: - Безопасны - нет арифметики указателей - Автоматическое управление памятью (GC) - Нельзя получить указатель на указатель - Разыменование происходит автоматически для методов Отличия от C/C++: - Нет pointer arithmetic - Нет ручного освобождения памяти - Нет NULL указателей (только nil) - Статическая проверка на этапе компиляции

type Person struct {
    Name string
    Age  int
}

func updateAge(p *Person, newAge int) {
    p.Age = newAge // автоматическое разыменование
}

func main() {
    person := Person{Name: "John", Age: 25}
    
    // Получение указателя
    ptr := &person
    
    // Escape analysis определит, где размещать:
    // стек или куча
    updateAge(ptr, 26)
}
type Person struct {
    Name string
    Age  int
}

func updateAge(p *Person, newAge int) {
    p.Age = newAge // автоматическое разыменование
}

func main() {
    person := Person{Name: "John", Age: 25}
    
    // Получение указателя
    ptr := &person
    
    // Escape analysis определит, где размещать:
    // стек или куча
    updateAge(ptr, 26)
}

Дополнительные вопросы

Как escape analysis влияет на производительность? Как посмотреть результаты анализа?