Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

s/сложный литерал/составной литерал/ #18

Merged
merged 1 commit into from
Oct 20, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
* [Отсроченный вызов (Defer)](#Отсроченный-вызов-defer)
* [Данные](#Данные)
* [Созданные с помощью new](#Созданные-с-помощью-new)
* [Конструкторы и сложные литералы](#Конструкторы-и-сложные-литералы)
* [Конструкторы и составные литералы](#Конструкторы-и-составные-литералы)
* [Создание с помощью make](#Создание-с-помощью-make)
* [Массивы](#Массивы)
* [Срезы(Slices, слайсы)](#Срезыslices-слайсы)
Expand Down Expand Up @@ -903,7 +903,7 @@ p := new(SyncedBuffer) // type *SyncedBuffer
var v SyncedBuffer // type SyncedBuffer
```

### Конструкторы и сложные литералы
### Конструкторы и составные литералы

[^](#Оглавление)

Expand All @@ -923,7 +923,7 @@ func NewFile(fd int, name string) *File {
}
```

Существует много шаблонов. Мы просто можем использовать *сложные литералы*, которые будут создавать новые сущности каждый раз.
Существует много шаблонов. Мы просто можем использовать *составные литералы*, которые будут создавать новые сущности каждый раз.

```golang
func NewFile(fd int, name string) *File {
Expand All @@ -936,25 +936,25 @@ func NewFile(fd int, name string) *File {
```

Обратите внимание на то, что в отличии от языка С, это нормально, возвращать адрес локальных переменных, так как переменная уже существует после возвращения из функции.
На самом деле, возвращение адресов сложных литералов создает новую сущность каждый раз, как он вычисляется.
На самом деле, возвращение адресов составных литералов создает новую сущность каждый раз, как он вычисляется.
Итак мы можем объединить последние две строки:

```golang
return &File{fd, name, nil, 0}
```

Поля сложных литералов должны быть в порядке объявления и все должны присутствовать.
Поля составных литералов должны быть в порядке объявления и все должны присутствовать.
Однако, используя маркировку как пара *поле*`:`*значение*, могут инициализироваться в любом порядке, с пропущенными полями заполняемые нулями.
Таким образом, можно объявить:

```golang
return &File{fd: fd, name: name}
```

В предельном случае, когда сложный литерал без полей вообще, то создание нулевым значением будет тип. Выражения `new(File)` и `&File{}` одинаковы.
В предельном случае, когда составной литерал без полей вообще, то создание нулевым значением будет тип. Выражения `new(File)` и `&File{}` одинаковы.


Сложные литералы могут также создавать массивы, срезы, карты, с пометкой полей как индексов или ключами карт.
Составные литералы могут также создавать массивы, срезы, карты, с пометкой полей как индексов или ключами карт.
К примеру, инициализированные значения `Enone`, `Eio`, и `Einval` разные.


Expand Down Expand Up @@ -1177,7 +1177,7 @@ for i := range picture {
Срезы не используются в качестве ключа для карт, так как равенство не определено для них.
Карты, также как и срезы, имеют внутреннюю структуру данных.
Если Вы передадите карту в функции и измените содержание карты, то изменения останутся для вызывающего.
Карты могут быть созданы с использованием синтаксиса сложных литералов с разделением по колонкам пар ключ-значение, поэтому легко создать начальные данные.
Карты могут быть созданы с использованием синтаксиса составных литералов с разделением по колонкам пар ключ-значение, поэтому легко создать начальные данные.

```golang
var timeZone = map[string]int{
Expand Down Expand Up @@ -1470,7 +1470,6 @@ fmt.Println(x)
Инициализация в языке Go более мощный инструмент нежели в языках С или С++.
Даже сложные структуры можно инициализировать. Упорядочивание между инициализируемыми объектами разных пакетов, обрабатывается корректно.


[^](#Оглавление)

### Константы(Constants)
Expand Down Expand Up @@ -2269,7 +2268,7 @@ func NewJob(command string, logger *log.Logger) *Job {
}
```

или с помощью сложных литералов:
или с помощью составных литералов:

```golang
job := &Job{command, log.New(os.Stderr, "Job: ", log.Ldate)}
Expand Down