Любые данные на компьютере хранятся в виде битов. Это те самые нули и единицы. И именно от типа данных будет зависеть как программа будет интерпретировать эти данные.
Например: один символ в Go представляет собой набор битов с типом rune. Если мы выполним следующий код
package main import "fmt" func main() { var a rune = 'A' fmt.Println(a) }
То увидим не "А", а 65, потому что Go так решил, собственно если мы поменяем rune на int ничего не поменяется. Мы отдали символ, а получили число.
Важно хранить наши биты в нужных типах данных, либо понимать как работает компилятор языка, чтобы не было неожиданностей, но сейчас не об этом.
Так какие же типы данных есть в Go?
- Целочисленные типы данных
- Типы данных для чисел с плавающей точкой
- Комплексные типы данных
- Строковые типы данных
- Логический тип данных
Целочисленные типы данных
Существуют следующие типы данных для хранения целочисленных данных.
- int8, int16, int32, int64 - для хранения отрицательных и положительных значений различного диапазона.
- uint8, uint16, uint32, uint64 - для хранения положительных значений различного диапазона.
- byte - целое число занимающее один байт(8 бит), синоним для int8.
- rune - символ строки, синоним для int32.
- int, uint - типы данных зависящие от операционной системы для которой компилируется программа. Если для 64 битной, то эти типы будут соответствовать int64 и uin64, если для 32 битной, то int32 и uint32 соответственно.
Цифра в конце говорит нам о том, сколько бит занимает этот тип данных. Чем больше бит, тем больше информации можем хранить в одной переменной, следовательно, можно сохранить большее число. Uint отличается от int тем, что использует все биты только для положительных значений, при одной размерности можно сохранить большее число, чем в int. Но нельзя хранить отрицательные значения.
Числовые диапазоны, которые можно хранить в данных типах данных:
uint8 : 0 - 255
uint16 : 0 - 65535
uint32 : 0 - 4294967295
uint64 : 0 - 18446744073709551615
int8 : -128 - 127
int16 : -32768 - 32767
int32 : -2147483648 - 2147483647
int64 : -9223372036854775808 - 9223372036854775807
При делении int на 0 будет получена ошибка компилятора "division by zero".
Типы данных для чисел с плавающей точкой
Для представления дробных чисел есть два типа данных:
float32, float64
Тип float32 обеспечивает шесть десятичных цифр точности после запятой. Точность ,обеспечиваемая типом float64, составляет 15 цифр после запятой.
При делении float на 0 результатом будет бесконечность (Inf).
Комплексные типы данных
Для хранения комплексных чисел в Go есть отдельные типы данных:
- complex64: комплексное число, где вещественная и мнимая части - float32
- complex128: комплексное число, где вещественная и мнимая части - float64
package main import "fmt" func main() { var foo complex64 = 1 + 2i var bar complex128 = 1.1 + 2.2i fmt.Println(foo, bar) }
В выводе увидим ровно то, что присвоили.
Строковые типы данных
Строки в Go представлены типом string. Являющимся последовательностью символов определенной длины. Значение переменной должно заключаться между двумя символами, для одной строки это ", для многострочного значения `.
package main import "fmt" func main() { var a string = "one string" var b string = ` String Can Do It ` fmt.Println(a) fmt.Println(b) }
Многострочная строка сохраняет переносы.
Логические типы данных
Есть один логический тип bool, который может принимать значение true, false. На этом остановлюсь.