Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Casting
  2. Tabela de perda de dados
  3. len: Tamanho de variáveis
  4. Typeof: Descobrir o tipo
  5. type: Apelidar tipo

A linguagem Go nos permite realizar a conversão(casting) dos tipos de dados primitivos. Além do cast, vamos ver também como descobrir o tamanho, o tipo de variáveis e também como renomear tipos de dados.

O assunto casting implícito e explícito também foram vistos em Tutorial C: Casting.

Assim como em outras linguagens, Golang possui a característica de casting de tipos de dados numéricos. Porém, a linguagem Go não permite a conversão implícita entre tipo de dados fazendo uma atribuição direta.

Exemplo 1: Simular casting implícito em C
package main

func main() {
	var valor1 uint16 = 256 //2 bytes de tamanho
	var valor2 uint8 = 255 	// 1 byte de tamanho
	// casting/atribuição
	valor1 = valor2 //Erro: cannot use valor2 (variable of type uint8) as uint16 value in assignment
}
Saída
./prog.go:4:6: declared and not used: valor1
./prog.go:10:11: cannot use valor2 (variable of type uint8) as uint16 value in assignment

Para a casting entre tipos numéricos precisamos de utilizar o operador de conversão/casting de cada tipo:

Sintaxe
nome_tipo_dado( valor )
Exemplo 2
package main

func main() {
	var valor1 uint16 = 256
	var valor2 uint8 = 0
	valor2 = uint8(valor1) //conversão usando cast
}
Saída
./prog.go:5:6: declared and not used: valor2

Como o tipo de dado uint8 armazena apenas 1 byte, no casting acima, apenas o último byte do inteiro foi atribuído a variável valor2 resultando em um valor 0.

Trabalhar com valores float também é feito da mesma forma. Podemos por exemplo recuperar a parte inteiro de um valor float como abaixo:

Exemplo 2
package main

func main() {
	var valor_float float32 = 10.99
	var valorInt = uint32(valor_float) //parte inteira 10
	var decimal float32 = valor_float - float32(valorInt)
}
Saída
./prog.go:6:6: declared and not used: decimal

No casting visto acima pode haver perda perdas de dados quando os tipos envolvidos possuem tamanhos de armazenamento diferentes. Abaixo uma tabela resumido do que foi dito:

Origem Tamanho(bytes) Destino Tamanho(bytes) Dados perdidos(bytes)
int64 8 int32 4 4
int32 8 int6 2 2
int16 16 int8 2 1
float32 4 int32 4 parte decimal

A tabela acima possui um pequeno exemplo da conversão de tipos para exemplificar o casting com perda de dados. Baseado nos tipo de dados já estudados é possível relacionar a quantidade de dados perdidos nesse tipo de conversão.

A linguagem Go, assim como algumas outras linguagens, fornecem uma forma de descobrir o tamanho de nossas variáveis. Para descobrir esse tamanho, utilizamos o função len como mostrado na sintaxe a seguir:

Sintaxe
len( nome_variavel )
Exemplo 3
package main
import "fmt"

func main() {

	var nome string = "string"
	var cod int = len(nome)
	fmt.Printf("tamanho: %d", cod)
}
Saída
tamanho: 6

O uso da função len é importante não só para descobrir o tamanho de nossas variáveis, como também servem como base para percorrer o conteúdo de strings, vetores e outros tipos de dados em conjunto com comandos de repetição.

O retorno da função len deve ser interpretada de acordo com o tipo de dados que estamos utilizando como nos tipos listados abaixo:

Tipo Retorno
Vetor Número de elementos
String Número de bytes utilizados
int Número de bytes utilizados
Struct -

Os tipos numérico padrão de Go, int32, uint8 e outros podem ser utilizados com a função len, porém, como os tamanho são conhecidos pelo próprio nome dos tipos não há necessidade de utilizar a função.

Para descobrir o tipo de dado de uma variável em tempo de execução, é necessário utilizar o package reflect. O método utilizado em questão é o método TypeOf.

Sintaxe
reflect.TypeOf( nome_variavel )

Como Go utiliza inferência de dados, esse método pode vir a ser útil em situações que precisamos validar o tipo de uma variável.

Exemplo 4
package main

import (
	"fmt"
	"reflect" //TypeOf
)

func main() {

	var teste:= 0x1FFFFFFFF
	fmt.Println("test = ", reflect.TypeOf(teste))
}
Saída
test =  uint64

A linguagem Go, possibilita a redefinição de um tipo de dados. Utilizamos o comando type para apelidar novos tipos de dados a partir dos tipos já existentes:

Sintaxe
type nome_apelido = tipo_existente
Exemplo 5
package main
import "fmt"

func main() {

	type meu_tipo = uint8
	var teste meu_tipo = 100
	fmt.Printf("%d", teste)
}
Saída
100
  1. 08/09/2025 - revisão 3 - Ajustes: pontuais, sintaxes, target de links, objetivos, e Ex./Saída. 1/2/4
  2. 16/09/2024 - revisão 2 - Ajustes gramaticais, em Ex. 2 e sintaxe type
  3. 02/10/2023 - revisão 1 - Correção em referências, erros gramaticais
  4. 21/08/2023 - versão inicial