Sobes.tech
Junior

Quais são os tipos de dados existentes em Go?

sobes.tech IA

Resposta da IA

Existem quatro categorias de tipos de dados em Go:

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

    • Booleanos: bool
    • Numéricos:
      • Inteiros: int, int8, int16, int32, int64, uint, uint8 (byte), uint16, uint32, uint64, uintptr
      • De ponto flutuante: float32, float64
      • Complexos: complex64, complex128
    • Strings: string
  2. Tipos compostos (Aggregate types) - coleções de tamanho fixo.

    • Arrays: [n]T (onde n é o tamanho, T é o tipo dos elementos)
    • Estruturas: struct {} (coleção de campos nomeados de diferentes tipos)
  3. Tipos de referência (Reference types) - tipos de referência, passados por referência, armazenam um ponteiro para os dados base.

    • Slices: []T (array dinâmico, baseado em um array)
    • Mapas: map[K]V (coleção de pares chave-valor)
    • Ponteiros: *T (armazenam o endereço de uma variável)
    • Canais: chan T, chan<- T, <-chan T (para sincronização e comunicação entre goroutines)
    • Funções: func(...) (...) (o tipo é a assinatura da função)
  4. Tipos de interface (Interface types) - definem um conjunto de assinaturas de métodos que os tipos de dados implementam.

    • Interfaces: interface{} (interface vazia), interface{ methodName(...) ... }

Exemplos:

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

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

// Tipos de referência
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                     // Ponteiro
var dataChan chan int = make(chan int)  // Canal
var myFunc func(int) int = func(x int) int { return x * 2 } // Função

// Tipos de interface
var i interface{} = "anything" // Interface vazia
type Shape interface { // Interface
    Area() float64
}