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