Artigos de Tecnologia e Negócios > Programação

Conversão de tipos com Go

Guilherme Lima
Guilherme Lima

imagem de capa

Fiquei responsável de desenvolver uma aplicação para descobrir qual seria o novo salário de um funcionário, baseado no aumento que ele recebeu. Esses valores são passados no formato de string, já que chegam de um formulário HTML.

Para saber o aumento precisamos multiplicar o salário pelo aumento(%) e fazer a divisão por 100, depois somamos esse valor obtido ao salário atual e temos o valor do novo salário.

package main

import (
    "fmt"
)

func main() {
    salario := "1000"
    aumento := "20"

    fmt.Println("O salário é", salario, "e o aumento de", aumento + "%")
}

Executando o código com o cálculo, obtive o seguinte resultado:

invalid operation: salario * aumento (operator * not defined on string)

Esso erro indica que o operador de multiplicação não pode ser aplicado, pois variáveis são do tipo string, então o que precisamos é encontrar uma maneira de fazer uma conversão de tipos.

Conhecendo o pacote strconv

A linguagem Go nos fornece um meio de conversão entre diferentes tipos compatíveis, por exemplo strings para inteiro. Essas conversões são feitas pelo pacote strconv, vamos ver como elas funcionam ?

Convertendo um tipo String para um tipo int

Tentei converter um tipo string para um tipo int, usamos o método Atoi do pacote strconv da seguinte forma:

salario := 1000
salarioConvertido := strconv.Atoi(salario)

Converti também o aumento para inteiro e usei as variáveis convertidas para executar o código:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    salario := "1000"
    aumento := "20"

    salarioConvertido := strconv.Atoi(salario)
    aumentoConvertido := strconv.Atoi(aumento)

    fmt.Println("O salário é", salario, "e o aumento de", aumento + "%")

    novoSalario := ((salarioConvertido * aumentoConvertido) / 100) + salarioConvertido)
    fmt.Println("O novo salário é", novoSalario)
}

E para minha surpresa, meu resultado foi:

assignment mismatch: 1 variable but strconv.Atoi returns 2 values

Que significa: Incompatibilidade de atribuição: 1 variável, mas strconv.Atoi retorna 2 valores.

Como assim 2 valores?

Um pouco sobre funções em GO

Acontece que essas e muitas outras funções em GO, podem retornar 1, 2, muitos ou nenhum valor. No caso da função Atoi, temos 2 retornos: valor convertido e uma possível mensagem de erro, caso a conversão não seja feita.

Sabendo disso, adicionei o erro como segundo retorno da função e fiz uma checagem com um if para tratar um possível erro que venha a acontecer.

func main() {
    salario := "1000"
    aumento := "20"

    salarioConvertido, err := strconv.Atoi(salario)
    if err != nil {
        fmt.Println(err)
    }
    aumentoConvertido, err := strconv.Atoi(aumento)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("O salário é", salario, "e o aumento de", aumento + "%")

    novoSalario := ((salarioConvertido * aumentoConvertido) / 100) + salarioConvertido)
    fmt.Println("O novo salário é", novoSalario)
}

E o resultado foi:

O salário é 1000 e o aumento de 20%
O novo salário é 1200

Você pode executar ou ver este código, clicando nesse link: https://play.golang.org/p/BT9Wc5XhBC0

Já sabemos como converter um tipo string para int com strconv.Atoi, mas e se precisarmos converter um tipo inteiro para um tipo string?

Mas, e o contrário?

Agora que sabemos o valor do novo salário, precisamos retornar esse valor para o HTML no formato string.

Nesse caso, utilizamos outra função do mesmo pacote chamada strconv.Itoa, conforme o exemplo abaixo:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    novoSalarioInt := 2019
    salarioConvertido := strconv.Itoa(novoSalarioInt)
    fmt.Println(numeroConvertido)
}

Você pode executar ou ver este código, clicando nesse link: https://play.golang.org/p/rh7_1e3Pmpz

Para saber mais

Caso o valor do aumento ou do salário seja um valor decimal, por exemplo 22.2 ou 2000.50, podemos utilizar a função strconv.Itoa do mesmo pacote, para converter uma string para número decimal, conforme o exemplo abaixo:

    salarioConvertido, err := strconv.ParseFloat(salario, 64)
    if err != nil {
        fmt.Println(err)
    }
    aumentoConvertido, err := strconv.ParseFloat(aumento, 64)
    if err != nil {
        fmt.Println(err)
    }

Para esse tipo de conversão, devemos informar o tamanho do tipo convertido, conforme a imagem abaixo:

imagem

Você pode executar ou ver este código, clicando nesse link: https://play.golang.org/p/0WWp1oxv2NQ

Se ficou interessado em como o Go funciona e como você pode utilizá-lo melhor, aqui na Alura temos uma Formação Go. Nela, você aprenderá como utilizar esse e outros recursos, desta incrível linguagem e muito mais.

Artigos de Tecnologia e Negócios > Programação

Cursos profissionais de Programação é na Alura, comece agora!

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana