среда, 22 мая 2019 г.

Спецификация Go: типы (types)

Тип (type) определяет набор значений вместе с операциями и методами, специфичными для этих значений. Тип может быть обозначен именем типа, если оно есть, или задан с использованием литерала типа, который составляет тип из существующих типов.

Type      = TypeName | TypeLit | "(" Type ")" .
TypeName  = identifier | QualifiedIdent .
TypeLit   = ArrayType | StructType | PointerType | FunctionType | InterfaceType |
      SliceType | MapType | ChannelType .

Язык предварительно объявляет имена определенных типов. Другие представлены с объявлениями типа. Составные типы - массив (array), структура (struct), указатель (pointer), функция (function), интерфейс (interface), срез (slice), карта (map) и типы каналов (channel) - могут быть созданы с использованием литералов типа.

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

type (
  A1 = string
  A2 = A1
)

type (
  B1 string
  B2 B1
  B3 []B1
  B4 B3
)

Базовым типом строки (string), A1, A2, B1 и B2, является строка (string). Базовый тип []B1, B3 и B4 - это []B1.

Наборы методов (method sets)

Тип может иметь набор методов (method set), связанный с ним. Набор методов типа интерфейса является его интерфейсом. Набор методов любого другого типа T состоит из всех методов, объявленных с типом получателя T. Набор методов соответствующего типа указателя *T является набором всех методов, объявленных с получателем *T или T (то есть он также содержит набор методов T). Дополнительные правила применяются к структурам (struct), содержащим встроенные поля, будет описано в посте о типах структур. Любой другой тип имеет пустой набор методов. В наборе методов каждый метод должен иметь уникальное непустое имя метода.

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


Читайте также:


Комментариев нет:

Отправить комментарий