👣 Указатели на структуры



▶️Итак, вот код:

v1 := Struct{}

v2 := &Struct{}


В чём отличие? Понятно, что во втором случае передается указатель, но когда что нужно использовать?





▶️Первая строка создает новый экземпляр структуры Struct и присваивает его переменной v1. В этом случае переменная v1 будет содержать саму структуру, а не указатель на нее.



Вторая строка создает новый экземпляр структуры Struct с помощью оператора &, который возвращает указатель на структуру, и присваивает этот указатель переменной v2. В этом случае переменная v2 будет содержать указатель на структуру, а не саму структуру.



Принципиальное отличие между этими двумя строками состоит в том, что в первом случае мы работаем с самой структурой, а во втором случае мы работаем с указателем на структуру. Это важно, потому что при работе с указателями мы можем изменять значения полей структуры, даже если у нас есть только указатель на нее. Если мы работаем со структурой напрямую, без использования указателя, то изменение полей структуры невозможно.



Вот, для наглядности:

type Struct struct {

Value int

}



func main() {

v1 := Struct{} // Создаем структуру

v1.Value = 10 // Изменяем поле Value



v2 := &Struct{} // Создаем указатель на структуру

v2.Value = 20 // Изменяем поле Value через указатель



fmt.Println(v1.Value) // Выводит 10

fmt.Println(v2.Value) // Выводит 20

}




В этом примере мы создаем структуру Struct и изменяем поле Value сначала через саму структуру, а затем через указатель на структуру. Оба вывода будут отличаться, потому что изменения сделанные через указатель на структуру будут отражаться на самой структуре, в то время как изменения, сделанные через саму структуру, не влияют на указатель на нее.



@golang_interview