Какие бывают типы в Go? Целочисленные, дробные, комплексные, структуы, интерфесы, время и дополнить.go-22

Основные категории типов

1. Целочисленные типы

Со знаком:

int   // Зависит от платформы (32 или 64 бита)
int8  // -128 до 127
int16 // -32768 до 32767
int32 // -2^31 до 2^31-1 (также известен как rune)
int64 // -2^63 до 2^63-1

Без знака:

uint    // Аналог int, но без знака
uint8   // 0 до 255 (также известен как byte)
uint16  // 0 до 65535
uint32  // 0 до 2^32-1
uint64  // 0 до 2^64-1
uintptr // Для хранения указателей

2. Дробные типы

float32  // 32-битное число с плавающей точкой (IEEE-754)
float64  // 64-битное (рекомендуется для большинства случаев)

3. Комплексные числа

complex64   // float32 + float32
complex128  // float64 + float64

Пример:

c := 3 + 4i
fmt.Println(real(c), imag(c)) // 3 4

4. Логический тип

bool // true или false

5. Строковый тип

string // неизменяемая последовательность байт (обычно UTF-8)

6. Структуры

type Person struct {
    Name string
    Age  int
}

7. Интерфейсы

type Reader interface {
    Read(p []byte) (n int, err error)
}

8. Время

import "time"
now := time.Now()

9. Каналы

ch := make(chan int)

10. Указатели

var p *int
num := 42
p = &num

11. Массивы и срезы

var arr [5]int      // Массив (фиксированная длина)
slice := []int{1,2} // Срез (динамический массив)

12. Функции как типы

type HandlerFunc func(http.ResponseWriter, *http.Request)

13. Псевдонимы типов

type ID = string
type UserID string // Новый тип, не алиас

Специальные типы

1. Пустой интерфейс

var any interface{} // Может хранить любое значение

2. Ошибки

type error interface {
    Error() string
}

3. Тип для JSON

json.Number // Для обработки чисел в JSON

4. Типы для работы с байтами

byte // алиас для uint8
rune // алиас для int32 (кодовая точка Unicode)

Составные типы

1. Map

m := make(map[string]int)

2. Функции с состоянием

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

3. Интерфейсы с типами

var val interface{} = "hello"
s := val.(string)

Резюмируем

  1. Базовые типы: числа, строки, булевы значения
  2. Составные типы: структуры, массивы, срезы, мапы
  3. Ссылочные типы: указатели, каналы, функции, интерфейсы
  4. Специальные типы: время, ошибки, пустой интерфейс
  5. Системные алиасы: byte, rune, uintptr
  6. Пользовательские типы: type объявления

Особенности системы типов Go:

  • Статическая типизация
  • Явное приведение типов
  • Отсутствие классов и наследования
  • Интерфейсы реализуются неявно
  • Поддержка составных типов
  • Возможность создавать пользовательские типы