Sobes.tech
Junior

Какви типове данни съществуват в Go?

sobes.tech AI

Отговор от 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[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
}