diff --git a/README.md b/README.md index 1d8db96..b295ff5 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ * [Отсроченный вызов (Defer)](#Отсроченный-вызов-defer) * [Данные](#Данные) * [Созданные с помощью new](#Созданные-с-помощью-new) - * [Конструкторы и сложные литералы](#Конструкторы-и-сложные-литералы) + * [Конструкторы и составные литералы](#Конструкторы-и-составные-литералы) * [Создание с помощью make](#Создание-с-помощью-make) * [Массивы](#Массивы) * [Срезы(Slices, слайсы)](#Срезыslices-слайсы) @@ -903,7 +903,7 @@ p := new(SyncedBuffer) // type *SyncedBuffer var v SyncedBuffer // type SyncedBuffer ``` -### Конструкторы и сложные литералы +### Конструкторы и составные литералы [^](#Оглавление) @@ -923,7 +923,7 @@ func NewFile(fd int, name string) *File { } ``` -Существует много шаблонов. Мы просто можем использовать *сложные литералы*, которые будут создавать новые сущности каждый раз. +Существует много шаблонов. Мы просто можем использовать *составные литералы*, которые будут создавать новые сущности каждый раз. ```golang func NewFile(fd int, name string) *File { @@ -936,14 +936,14 @@ func NewFile(fd int, name string) *File { ``` Обратите внимание на то, что в отличии от языка С, это нормально, возвращать адрес локальных переменных, так как переменная уже существует после возвращения из функции. -На самом деле, возвращение адресов сложных литералов создает новую сущность каждый раз, как он вычисляется. +На самом деле, возвращение адресов составных литералов создает новую сущность каждый раз, как он вычисляется. Итак мы можем объединить последние две строки: ```golang return &File{fd, name, nil, 0} ``` -Поля сложных литералов должны быть в порядке объявления и все должны присутствовать. +Поля составных литералов должны быть в порядке объявления и все должны присутствовать. Однако, используя маркировку как пара *поле*`:`*значение*, могут инициализироваться в любом порядке, с пропущенными полями заполняемые нулями. Таким образом, можно объявить: @@ -951,10 +951,10 @@ func NewFile(fd int, name string) *File { return &File{fd: fd, name: name} ``` -В предельном случае, когда сложный литерал без полей вообще, то создание нулевым значением будет тип. Выражения `new(File)` и `&File{}` одинаковы. +В предельном случае, когда составной литерал без полей вообще, то создание нулевым значением будет тип. Выражения `new(File)` и `&File{}` одинаковы. -Сложные литералы могут также создавать массивы, срезы, карты, с пометкой полей как индексов или ключами карт. +Составные литералы могут также создавать массивы, срезы, карты, с пометкой полей как индексов или ключами карт. К примеру, инициализированные значения `Enone`, `Eio`, и `Einval` разные. @@ -1177,7 +1177,7 @@ for i := range picture { Срезы не используются в качестве ключа для карт, так как равенство не определено для них. Карты, также как и срезы, имеют внутреннюю структуру данных. Если Вы передадите карту в функции и измените содержание карты, то изменения останутся для вызывающего. -Карты могут быть созданы с использованием синтаксиса сложных литералов с разделением по колонкам пар ключ-значение, поэтому легко создать начальные данные. +Карты могут быть созданы с использованием синтаксиса составных литералов с разделением по колонкам пар ключ-значение, поэтому легко создать начальные данные. ```golang var timeZone = map[string]int{ @@ -1470,7 +1470,6 @@ fmt.Println(x) Инициализация в языке Go более мощный инструмент нежели в языках С или С++. Даже сложные структуры можно инициализировать. Упорядочивание между инициализируемыми объектами разных пакетов, обрабатывается корректно. - [^](#Оглавление) ### Константы(Constants) @@ -2269,7 +2268,7 @@ func NewJob(command string, logger *log.Logger) *Job { } ``` -или с помощью сложных литералов: +или с помощью составных литералов: ```golang job := &Job{command, log.New(os.Stderr, "Job: ", log.Ldate)}