Назад к вопросам
Junior
171
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В Go существует четыре категории типов данных:

  1. Базовые типы (Basic types) - предопределенные компилятором.

    • Булевы: bool
    • Числовые:
      • Целочисленные: int, int8, int16, int32, int64, uint, uint8 (byte), uint16, uint32, uint64, uintptr
      • С плавающей запятой: float32, float64
      • Комплексные числа: complex64, complex128
    • Строковые: string
  2. Составные типы (Aggregate types) - коллекции фиксированного размера.

    • Массивы: [n]T (где n - размер, T - тип элементов)
    • Структуры: struct {} (коллекция именованных полей разного типа)
  3. Референсные типы (Reference types) - типы-ссылки, передаются по ссылке, хранят указатель на базовые данные.

    • Слайсы: []T (динамический массив, построен на основе массива)
    • Карты (Map): map[K]V (коллекция пар ключ-значение)
    • Указатели: *T (хранят адрес переменной)
    • Каналы: chan T, chan<- T, <-chan T (для синхронизации и коммуникации горутин)
    • Функции: func(...) (...) (типом является сигнатура функции)
  4. Интерфейсные типы (Interface types) - определяют набор сигнатур методов, реализуемых типами данных.

    • Интерфейсы: interface{} (пустой интерфейс), interface{ methodName(...) ... }

Примеры:

// Базовые типы
var isTrue bool = true
var age int = 30
var price float64 = 19.99
var name string = "Go Gopher"

// Составные типы
var numbers [5]int = [5]int{1, 2, 3, 4, 5} // Массив
type Person struct { // Структура
    Name string
    Age  int
}
var p Person = Person{Name: "Alice", Age: 25}

// Референсные типы
var slice []int = []int{1, 2, 3}           // Слайс
var grades map[string]int = map[string]int{"Alice": 90, "Bob": 85} // Карта
var ptr *int = &age                     // Указатель
var dataChan chan int = make(chan int)  // Канал
var myFunc func(int) int = func(x int) int { return x * 2 } // Функция

// Интерфейсные типы
var i interface{} = "anything" // Пустой интерфейс
type Shape interface { // Интерфейс
    Area() float64
}