Опубликовано: 30 июня 2022 г. 19:20 | Автор: echodiv | Категория: Разработка | 👁 633

Типы данных в Go

Любые данные на компьютере хранятся в виде битов. Это те самые нули и единицы. И именно от типа данных будет зависеть как программа будет интерпретировать эти данные. 

Например: один символ в 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. На этом остановлюсь.