#5.1 golang Типы данных и nil - Go для начинающих

Ранее мы говорили об объявлении переменных, теперь разберем простые типы данных.

Тип int - целые числа

Тип int — платформозависимый тип в Go. На хранение значения выделяется либо 32 бита, либо 64 бита в зависимости от разряднсти вашей операционной системы.

При объявлении переменной с указанием int:

// int — платформозависимый тип, 32/64
var i int = 10

- разрядноость типа int выбирается автоматически.
Если вас не устраивает разрядность или вы хотите большего контроля, то в Go поддержка от int8 до int64, которая позволяет хранить большие значения:

// int - платформозависимый тип, 32/64
var i int = 10
// автоматически выбранный int
var autoInt = -10
// Как тип можно указать: int8, int16, int32, int64
var bigInt int64 = 1<<32 - 1


Есть беззнаковый int — uint, он тоже может быть платформозависимым диапазона хранимых данных, к нему же относятся и более "точные" типы от uint8 до uint64:
Примеры:

// Беззнаковый платформозависимый тип, 32/64
var unsignedInt uint = 100500
//  Беззнаковый тоже может быть: uint8, unit16, uint32, unit64
var unsignedBigInt uint64 = 1<<64 - 1

Тип float - вещественные числа

Числа с плавающей точкой представлены как одинарной точности float 32, так и двойной точности.

// float32, float64
var pi float32 = 3.141
var e = 2.718
goldenRatio := 1.618

Для них тоже есть автоподстановка типа, автоугадывание типа, значение по умолчанию для них тоже ноль.

Тип bool - логический, булев тип

В логических переменных значение по умолчанию ноль, и оно тоже может угадываться автоматически.

// bool логический тип
var b bool // false по-умолчанию
var isOk bool = true
var success = true
cond := true

Тип complex - комплексные числа

Зато в go есть комплексные переменные и полный набор функций для работы с ними, объявлять можно так:

// complex64, complex128
var c complex128 = -1.1 + 7.12i
c2 := -1.1 + 7.12i

хотя на практике этот тип данных используется не очень часто.

nil - "пустое" значение по умолчанию

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

  • для чисел это 0,
  • для логического типа false,
  • для строк - пустая строка.

Для целой группы типов, которые мы изучим далее, такое значение по умолчанию обозначается словом nil (читается "нил", с английского примерно - "ничто"): переменная объявлена, но конкретного значения в ней еще нет.

Таких типов в Go несколько - указатели, срезы, хэш-таблицы, каналы, функции и интерфейсы, со всеми ими мы разберемся в следующих уроках.
Пока достаточно запомнить сам факт: если распечатать такую "пустую" переменную, мы увидим не число и не пустую строку, а именно nil:

var p *int // указатель на число (что такое указатели - разберем далее по курсу)

fmt.Println(p) // выведет: nil

При этом попытка обратиться к значению, которого нет, приведет к панике - критической ошибке:

var p *int
fmt.Println(*p) // panic: runtime error:
// invalid memory address or nil pointer dereference

Поэтому в коде на Go часто встречается проверка "а есть ли вообще значение":

if p != nil {
	fmt.Println(*p) // печатаем значение, только если оно есть
}

Если вы уже писали на PHP или Java - nil здесь играет ту же роль, что null (а в C++ - nullptr).

Видео-материалы

  • golang Простые типы данных: ВкВидео | Ютуб | Телеграм

Key Words for FKN + antitotal forum (CS VSU):