Sobes.tech
Junior

Jakie są typy danych w Go?

sobes.tech AI

Odpowiedź od AI

W języku Go istnieją cztery kategorie typów danych:

  1. Typy podstawowe (Basic types) - zdefiniowane przez kompilator.

    • Typy logiczne: bool
    • Typy numeryczne:
      • Liczby całkowite: int, int8, int16, int32, int64, uint, uint8 (byte), uint16, uint32, uint64, uintptr
      • Liczby zmiennoprzecinkowe: float32, float64
      • Liczby zespolone: complex64, complex128
    • Łańcuchy znaków: string
  2. Typy złożone (Aggregate types) - kolekcje o stałym rozmiarze.

    • Tablice: [n]T (gdzie n to rozmiar, T to typ elementów)
    • Struktury: struct {} (kolekcja nazwanych pól różnych typów)
  3. Typy referencyjne (Reference types) - typy odwołań, przekazywane przez odwołanie, przechowują wskaźnik do danych podstawowych.

    • Slicery: []T (dynamiczna tablica, oparta na tablicy)
    • Mapy: map[K]V (kolekcja par klucz-wartość)
    • Wskaźniki: *T (przechowują adres zmiennej)
    • Kanały: chan T, chan<- T, <-chan T (do synchronizacji i komunikacji między gorutynami)
    • Funkcje: func(...) (...) (typem jest sygnatura funkcji)
  4. Typy interfejsowe (Interface types) - definiują zestaw sygnatur metod, które implementują typy danych.

    • Interfejsy: interface{} (pusty interfejs), interface{ methodName(...) ... }

Przykłady:

// Typy podstawowe
var isTrue bool = true
var age int = 30
var price float64 = 19.99
var name string = "Go Gopher"

// Typy złożone
var numbers [5]int = [5]int{1, 2, 3, 4, 5} // Tablica
type Person struct { // Struktura
    Name string
    Age  int
}
var p Person = Person{Name: "Alice", Age: 25}

// Typy referencyjne
var slice []int = []int{1, 2, 3}           // Slice
var grades map[string]int = map[string]int{"Alice": 90, "Bob": 85} // Mapa
var ptr *int = &age                     // Wskaźnik
var dataChan chan int = make(chan int)  // Kanał
var myFunc func(int) int = func(x int) int { return x * 2 } // Funkcja

// Typy interfejsowe
var i interface{} = "anything" // Pusty interfejs
type Shape interface { // Interfejs
    Area() float64
}