Sobes.tech
Junior

O que pode ser representado por uma interface vazia em Go?

sobes.tech IA

Resposta da IA

Em Go, a interface vazia interface{} pode representar qualquer valor de qualquer tipo.

Isto deve-se ao facto de que qualquer tipo implementa implicitamente a interface vazia, uma vez que não é necessária a implementação de quaisquer métodos.

Exemplos do que pode ser representado por uma interface vazia:

  • Número inteiro: int, int32, int64
  • Número de ponto flutuante: float32, float64
  • String: string
  • Valor booleano: bool
  • Arrays e slices: []int, []string, [3]int
  • Mapas: map[string]int, map[int]interface{}
  • Estruturas: qualquer tipo de estrutura definido pelo utilizador
  • Ponteiros: *int, *MyStruct
  • Funções: func(), func(string) int
  • Canais: chan int, chan interface{}
  • Nil (nulo) para tipos de referência: nil

Isto torna a interface vazia útil quando precisa armazenar ou passar valores de tipo desconhecido durante a compilação, por exemplo, ao trabalhar com dados não tipados utilizados em bibliotecas de codificação/decodificação (JSON, XML) ou em frameworks para trabalhar com bases de dados.

Exemplo de uso em map:

// Map onde os valores podem ser de qualquer tipo
data := make(map[string]interface{})
data["age"] = 30
data["name"] = "Alice"
data["isStudent"] = true
data["hobbies"] = []string{"reading", "hiking"}

// Acesso aos valores e verificação do tipo
age, ok := data["age"].(int)
if ok {
	// Trabalhar com int
}

name, ok := data["name"].(string)
if ok {
	// Trabalhar com string
}

É importante lembrar que ao trabalhar com valores armazenados como interface{}, é necessário fazer uma afirmação de tipo (type assertion) ou um switch de tipo (type switch) para aceder ao valor subjacente e trabalhar com ele no seu tipo real.