# Операторы и встроенные функции

## Операторы

`+` - сложение, конкатенация

`=` - присваивание - кладется значение в существующую переменную

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

```go
test := "123"
if true {
	test := "456"
	fmt.Println(test)
}
fmt.Println(test)

/*
Out:

456
123
*/
```

`<-` - оператор передачи данных

## Оператор отложенного вызова defer

defer - отложенный вызов функции. Функция os.File.Close() будет вызвана при выходе из main. Это нужно для экономии времени (например, если эта операция занимает много времени).

```go
func main() {
    defer os.File.Close()
}
```

## Оператор запуска goroutins

```go
func(){
    go func() {
        // ...
    }()
}()
```

## Встроенные функции

Функции могут быть переопределены для пользовательских типов

```
len() - длина или размер коллекций, каналов обмена данными и строк
cap() - емкость срезов и каналов (может быть больше фактической длины)

new_stack = append(*stack, obj1, obj2, ...) - функция над срезами: добавление элементов в срез
make(map[string]string) - создание ссылки, срезов, отображений и каналов
copy(dst, src)  // копирует срез из src в dst

```

## Обработка исключений

panic()

recover()

всегда возвращать объект err.
