Como encontrar um tipo de objeto em Go
Os tipos de dados especificam o tipo associado a uma variável Go válida. Há quatro categorias de tipos de dados em Go que são as seguintes:
-
Tipo básico: Números, strings e booleans
-
Tipo agregado: Array e structs
-
Tipo de referência: Ponteiros, fatias, mapas, funções e canais
-
Tipo de interface
Podemos encontrar o tipo de dados de um objeto em Go utilizando formatação de string
, reflect
e asserções de tipo.
Formatação de string para encontrar o tipo de dado em Go
Podemos utilizar a função Printf
da embalagem fmt
com uma opção especial de formatação. As opções de formatação disponíveis para exibir variáveis utilizando o fmt
são:
Formato | Descrição |
---|---|
%v |
Imprimir o valor da variável em um formato padrão |
%+v |
Adicionar nomes de campo com o valor |
%#v |
uma representação do valor da sintaxe |
%T |
uma representação do tipo de valor, por meio de sintaxe |
%% |
um sinal literal de porcentagem; não consome nenhum valor |
Utilizamos a bandeira %T
no pacote fmt
para encontrar um tipo de objeto em Go.
package main
import "fmt"
func main() {
i := 18
fmt.Printf("Datatype of i : %T\n", i)
s := "Dixya Lyaho"
fmt.Printf("Datatype of s : %T\n", s)
f := 25.32
fmt.Printf("Datatype of f : %T\n", f)
}
Resultado:
Datatype of i : int
Datatype of s : string
Datatype of f : float64
reflect
Pacote
Também podemos utilizar o pacote reflect
para encontrar o tipo de dado de um objeto. A função Typeof
do pacote reflect
retorna um tipo de dado que poderia ser convertido para um string
com .String()
.
package main
import (
"fmt"
"reflect"
)
func main() {
o1 := "string"
o2 := 10
o3 := 1.2
o4 := true
o5 := []string{"foo", "bar", "baz"}
o6 := map[string]int{"apple": 23, "tomato": 13}
fmt.Println(reflect.TypeOf(o1).String())
fmt.Println(reflect.TypeOf(o2).String())
fmt.Println(reflect.TypeOf(o3).String())
fmt.Println(reflect.TypeOf(o4).String())
fmt.Println(reflect.TypeOf(o5).String())
fmt.Println(reflect.TypeOf(o6).String())
}
Resultado:
string
int
float64
bool
[]string
map[string]int
Método type assertions
O tipo método de afirmação retorna uma variável booleana para dizer se a operação de afirmação é bem sucedida ou não. Utilizamos um tipo switch
para fazer várias asserções de tipo em série para encontrar o tipo de dados do objeto.
package main
import (
"fmt"
)
func main() {
var x interface{} = 3.85
switch x.(type) {
case int:
fmt.Println("x is of type int")
case float64:
fmt.Println("x is of type float64")
default:
fmt.Println("x is niether int nor float")
}
}
Resultado:
x is of type float64
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn