0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Go - язык со строгой типизацией и поддержкой объектного стиля, но без привычного class. Вместо этого используется сочетание структур (для хранения состояния) и методов (для поведения).</p>
1
<p>Go - язык со строгой типизацией и поддержкой объектного стиля, но без привычного class. Вместо этого используется сочетание структур (для хранения состояния) и методов (для поведения).</p>
2
<p>Это позволяет создавать объекты, инкапсулирующие данные и операции над ними - как в ООП, но проще и прямолинейнее.</p>
2
<p>Это позволяет создавать объекты, инкапсулирующие данные и операции над ними - как в ООП, но проще и прямолинейнее.</p>
3
<h2>Объявление структуры</h2>
3
<h2>Объявление структуры</h2>
4
<p>Структура - это пользовательский тип, состоящий из набора полей:</p>
4
<p>Структура - это пользовательский тип, состоящий из набора полей:</p>
5
<p>Структура User описывает сущность с двумя полями: Name (строка) и Age (целое число). Теперь User - это новый тип данных, который можно использовать, как любой другой. Чтобы создать значение структуры, используют литерал структуры.</p>
5
<p>Структура User описывает сущность с двумя полями: Name (строка) и Age (целое число). Теперь User - это новый тип данных, который можно использовать, как любой другой. Чтобы создать значение структуры, используют литерал структуры.</p>
6
<p>К полям структуры можно обращаться напрямую:</p>
6
<p>К полям структуры можно обращаться напрямую:</p>
7
<h2>Методы</h2>
7
<h2>Методы</h2>
8
<p>Go позволяет определять методы - это функции, привязанные к типу (например, к структуре). Они выглядят как обычные функции, но с особым параметром - приёмником (receiver), который указывается в скобках перед именем функции. Обращаться к нему можно так же как и любым другим параметрам:</p>
8
<p>Go позволяет определять методы - это функции, привязанные к типу (например, к структуре). Они выглядят как обычные функции, но с особым параметром - приёмником (receiver), который указывается в скобках перед именем функции. Обращаться к нему можно так же как и любым другим параметрам:</p>
9
<p>Этот метод можно вызвать на экземпляре структуры:</p>
9
<p>Этот метод можно вызвать на экземпляре структуры:</p>
10
<h2>Где описывать методы?</h2>
10
<h2>Где описывать методы?</h2>
11
<p>Методы определяются вне структуры, но обязательно в том же пакете. В теле самой структуры можно определить только поля. Вот правильная структура:</p>
11
<p>Методы определяются вне структуры, но обязательно в том же пакете. В теле самой структуры можно определить только поля. Вот правильная структура:</p>
12
<p>Порядок не имеет значения - метод может быть описан до или после использования структуры. Главное - чтобы тип, к которому он относится, был определён в том же пакете.</p>
12
<p>Порядок не имеет значения - метод может быть описан до или после использования структуры. Главное - чтобы тип, к которому он относится, был определён в том же пакете.</p>
13
<h2>Передача структуры в функцию</h2>
13
<h2>Передача структуры в функцию</h2>
14
<p>Со структурами работают не только методы. Как и любой другой тип, структуру можно передавать в обычные функции. Это позволяет использовать её как единое значение, передавая сразу связанный набор данных.</p>
14
<p>Со структурами работают не только методы. Как и любой другой тип, структуру можно передавать в обычные функции. Это позволяет использовать её как единое значение, передавая сразу связанный набор данных.</p>
15
<p>Функция PrintAge() получает структуру User и работает с её полями. При этом структура передаётся<strong>по значению</strong>, то есть копируется. Если изменить ее внутри функции, то изменится копия - оригинал останется без изменений. Такая же логика действует и для методов.</p>
15
<p>Функция PrintAge() получает структуру User и работает с её полями. При этом структура передаётся<strong>по значению</strong>, то есть копируется. Если изменить ее внутри функции, то изменится копия - оригинал останется без изменений. Такая же логика действует и для методов.</p>
16
<p>Чтобы изменения применялись к оригинальной структуре, нужно передавать указатель. Это мы научимся делать в следующих уроках.</p>
16
<p>Чтобы изменения применялись к оригинальной структуре, нужно передавать указатель. Это мы научимся делать в следующих уроках.</p>