Какие типы данных существуют в Go?

Ответ

Go — это статически типизированный язык программирования с богатым набором встроенных типов, которые делятся на две основные категории:

Базовые (встроенные) типы

  • Целочисленные знаковые: int, int8, int16, int32 (псевдоним rune), int64.
  • Целочисленные беззнаковые: uint, uint8 (псевдоним byte), uint16, uint32, uint64, uintptr.
  • Числа с плавающей точкой: float32, float64.
  • Комплексные числа: complex64, complex128.
  • Логический: bool (принимает значения true или false).
  • Строковый: string (неизменяемая последовательность байт в кодировке UTF-8).

Составные (композитные) типы

  • Массив (Array): [n]T — коллекция элементов одного типа фиксированной длины.
  • Срез (Slice): []T — динамический, гибкий вид на базовый массив.
  • Структура (Struct): struct { ... } — коллекция именованных полей, которые могут иметь разные типы.
  • Указатель (Pointer): *T — хранит адрес в памяти другой переменной.
  • Функция (Function): func(...) ... — функции являются типами первого класса, их можно присваивать переменным.
  • Интерфейс (Interface): interface { ... } — определяет набор методов. Любой тип, реализующий эти методы, неявно удовлетворяет интерфейсу.
  • Карта (Map): map[K]V — неупорядоченная коллекция пар ключ-значение.
  • Канал (Channel): chan T — механизм для безопасного обмена данными между горутинами.

Пример использования:

package main

import "fmt"

// Определяем структуру
type Person struct {
    Name string
    Age  int
}

func main() {
    // Базовые типы
    var score int = 100
    var message string = "Success"

    // Составные типы
    primes := [3]int{2, 3, 5}      // Массив
    names := []string{"Alice", "Bob"} // Срез
    ages := make(map[string]int)   // Карта
    ages["Alice"] = 30

    // Структура
    p := Person{Name: "Charlie", Age: 25}

    fmt.Printf("%s: %d, Primes: %v, Names: %v, Person: %+vn", 
        message, score, primes, names, p)
}