В Go встроен ряд примитивных и составных типов данных. Однако вы также можете создавать свои собственные пользовательские типы данных, и это делается с помощью Structs.

Эта статья является частью серии Типы данных в Go.

Структуры (сокращение от «структура») позволяют создавать составные типы данных для хранения набора пар ключ-значение. Структуры часто используются для представления объектов реального мира.

Структуры определяются с помощью оператора type (строки 10–16). После этого вы можете использовать новый тип данных для создания переменных (строки 18–24).

Строка 10: мы использовали оператор type для определения структуры с именем employee. Оператор type также означает, что мы определяем пользовательский тип данных. Это означает, что Go рассматривает «сотрудника» как просто еще один тип данных, похожий на целые числа, строки, логические значения и т. д.

Строки 11–15. Каждая строка определяет пару "ключ-значение". Каждая запись состоит из 2 полей: имени ключа, за которым следует тип данных, например. ключ «курильщик» может хранить логические значения. Мне нравится представлять каждую запись в виде ящика, где первое поле (например, «курильщик») написано на крышке ящика, а второе поле (например, логическое) указывает, какие типы значений разрешено хранить в ящике.

Строка 18: мы объявили переменную с именем dave. Это экземпляр структуры «employee».

Строка 26: выводит все значения в фигурных скобках, как показано в выводе.

Строка 27–28: оператор . используется для доступа к определенному значению ключа.

Строка 31: тип данных нашей структурной переменной — main.employee. Имя пакета (main) также включено сюда, так как определение структуры «основного» пакета использовалось для создания этой переменной «dave».

Мне нравится думать об определении структуры (например, строки 18-24) как о схеме создания экземпляров типа данных «сотрудник».

Структуры в сокращенной форме

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

Строки 10–14: все ключи, значения которых относятся к одному типу данных (например, «id» и «age»), сгруппированы и определены в одной строке.

Строка 16. Отсутствие названий ключей позволяет нам объявить все значения в одной строке. Порядок значений теперь должен соответствовать порядку в определении структуры (строки 10–24).

Строка 18: на этот раз порядок распечатки немного отличается только потому, что нам пришлось изменить порядок ключей в самом определении структуры (строки 10–24), чтобы сгруппировать ключи на основе типов данных. .

Вы также можете использовать технику fmt.Printf("%+v\n", myStruct) для красивой печати структуры, вот пример.

Подробнее о структурах

Это покрытие — основы структур. Чтобы узнать больше, проверьте: