Sobes.tech
Junior

¿Qué tipos de datos existen en Go?

sobes.tech AI

Respuesta de la IA

En Go existen cuatro categorías de tipos de datos:

  1. Tipos básicos (Basic types) - predefinidos por el compilador.

    • Booleanos: bool
    • Numéricos:
      • Enteros: int, int8, int16, int32, int64, uint, uint8 (byte), uint16, uint32, uint64, uintptr
      • De punto flotante: float32, float64
      • Complejos: complex64, complex128
    • Cadenas: string
  2. Tipos compuestos (Aggregate types) - colecciones de tamaño fijo.

    • Arrays: [n]T (donde n es el tamaño, T es el tipo de elementos)
    • Estructuras: struct {} (colección de campos nombrados de diferentes tipos)
  3. Tipos de referencia (Reference types) - tipos de referencia, se pasan por referencia, almacenan un puntero a los datos base.

    • Slices: []T (arreglo dinámico, basado en un array)
    • Mapas: map[K]V (colección de pares clave-valor)
    • Punteros: *T (almacenan la dirección de una variable)
    • Canales: chan T, chan<- T, <-chan T (para sincronización y comunicación entre goroutines)
    • Funciones: func(...) (...) (el tipo es la firma de la función)
  4. Tipos de interfaz (Interface types) - definen un conjunto de firmas de métodos que los tipos de datos implementan.

    • Interfaces: interface{} (interfaz vacía), interface{ methodName(...) ... }

Ejemplos:

// Tipos básicos
var isTrue bool = true
var age int = 30
var price float64 = 19.99
var name string = "Go Gopher"

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

// Tipos de referencia
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                     // Puntero
var dataChan chan int = make(chan int)  // Canal
var myFunc func(int) int = func(x int) int { return x * 2 } // Función

// Tipos de interfaz
var i interface{} = "anything" // Interfaz vacía
type Shape interface { // Interfaz
    Area() float64
}