Sobes.tech
Junior

Quali sono i tipi di dati in Go?

sobes.tech AI

Risposta dell'AI

In Go ci sono quattro categorie di tipi di dati:

  1. Tipi di base (Basic types) - predefiniti dal compilatore.

    • Booleani: bool
    • Numerici:
      • Interi: int, int8, int16, int32, int64, uint, uint8 (byte), uint16, uint32, uint64, uintptr
      • a virgola mobile: float32, float64
      • Complessi: complex64, complex128
    • Stringhe: string
  2. Tipi aggregati (Aggregate types) - collezioni di dimensione fissa.

    • Array: [n]T (dove n è la dimensione, T è il tipo degli elementi)
    • Strutture: struct {} (collezione di campi nominati di tipi diversi)
  3. Tipi di riferimento (Reference types) - tipi di riferimento, passati per riferimento, memorizzano un puntatore ai dati di base.

    • Slice: []T (array dinamico, basato su un array)
    • Mappe: map[K]V (collezione di coppie chiave-valore)
    • Puntatori: *T (memorizzano l'indirizzo di una variabile)
    • Canali: chan T, chan<- T, <-chan T (per sincronizzazione e comunicazione tra goroutine)
    • Funzioni: func(...) (...) (il tipo è la firma della funzione)
  4. Tipi di interfaccia (Interface types) - definiscono un insieme di firme di metodi implementate dai tipi di dati.

    • Interfacce: interface{} (interfaccia vuota), interface{ methodName(...) ... }

Esempi:

// Tipi di base
var isTrue bool = true
var age int = 30
var price float64 = 19.99
var name string = "Go Gopher"

// Tipi aggregati
var numbers [5]int = [5]int{1, 2, 3, 4, 5} // Array
type Person struct { // Struttura
    Name string
    Age  int
}
var p Person = Person{Name: "Alice", Age: 25}

// Tipi di riferimento
var slice []int = []int{1, 2, 3}           // Slice
var grades map[string]int = map[string]int{"Alice": 90, "Bob": 85} // Mappa
var ptr *int = &age                     // Puntatore
var dataChan chan int = make(chan int)  // Canale
var myFunc func(int) int = func(x int) int { return x * 2 } // Funzione

// Tipi di interfaccia
var i interface{} = "anything" // Interfaccia vuota
type Shape interface { // Interfaccia
    Area() float64
}