# инициализация и выполнение программы, нулевое значение

Когда для переменной выделяется хранилище, либо через объявление, либо через вызов new, либо когда создается новое значение, либо через составной литерал, либо через вызов make, и явная инициализация не предоставляется, переменная или значение задаются **значением по умолчанию**. Каждый элемент такой переменной или значения устанавливается в **нулевое значение** для его типа: **false** для логических значений, **0** для числовых типов, **""** для строк и **nil** для указателей, функций, интерфейсов, срезов, каналов и карт. Эта инициализация выполняется рекурсивно, поэтому, например, каждый элемент массива структур будет обнулять свои поля, если не указано значение.

Эти два простых объявления эквивалентны:

```
var i int
var i int = 0
```

После

```
type T struct { i int; f float64; next *T }
t := new(T)
```

верно следующее:

```
t.i == 0
t.f == 0.0
t.next == nil
```

То же самое будет верно и после

```
var t T
```
