O artigo anterior escrevemos o nosso primeiro código em Go. Hoje falaremos um pouco sobre a diferença que existe entre constantes e variáveis.

1. O que é constante e variável?

Constantes e variáveis podem ser visualizadas como containers que são utilizados para guardar informação.

Uma vez que o valor de uma constante é atribuído, ele não pode ser alterado. Um outro ponto muito importante é que a constante ela é analisada no momento em que o código é compilado. Existem tipos específicos que podem ser utilizados como constante: boolean, rune, integer, floating-point, complex e string.

Rune, Integer, Floating-point e Complex são chamados coletivamente de constantes numéricas.

As variáveis por outro lado, são analisadas em runtime, ou seja, em tempo de execução, variáveis, assim como o nome também indica, são passíveis de sofrerem alterações, o valor atribuído pode ser alterado, mas não o seu tipo.

2. Show me the code

2.1 A palavra-chave “const”

Existem constantes tipadas e não tipadas. Uma constante não tipada receberá o valor padrão de uma conversão implícita. Os valores padrão para constantes são bool, rune, int, float64, complex128 ou string.

const minhaIdade int32 = 27

Parar inicializar uma constante, seguimos o seguinte padrão.

  • const - Palavra-chave para declarar uma constante.
  • minhaIdade - Nome que será atribuído a constante.
  • int32 - Tipo que estamos atribuindo (Não é obrigatório, pode ser não tipada)
  • 27 - Valor que será atribuído.
const minhaIdade  = 27

O exemplo acima usamos uma constante não tipada, como podemos conferir se o tipo atribuído nesse caso realmente foi um int?

Para validar essa informação, vamos utilizar um pacote do bult-in chamado reflect, ele consegue analisar o nosso código em runtime.

package main

import (
	"fmt"
	"reflect"
)

const minhaIdade = 27

func main() {
	fmt.Println(reflect.TypeOf(minhaIdade))
}

2.2 A palavra-chave “var”

Go é uma linguagem estiticamente tipada, isso quer dizer que o tipo da variável é inferido antes da compilação da aplicação.

A palavra-chave “var” é utilizada para a definição de uma variável, o código abaixo mostra como podemos declaras as variáveis em Go.

package main
 
import "fmt"
 
func main() {
        var name = "Alexandre"           // sem declaração de tipo
        var surname string = "Awadallak" // utilizando declaração de tipo
        var age int           // sem inicialização de valor
        fmt.Println(age)      // O retorno da execução irá exibir 0 
}

2.2.1 Inicialização curta de variáveis

É muito comum você olhar códigos escritos em Go que utilizam a sintaxe curta para a inicialização de variáveis. Com esse tipo de abordagem não é necessário o uso da palavra-chave var.

Porém é essencial compreender que variáveis a nível de pacote não podem ser inicializadas dessa maneira, apenas quando dentro do escopo de um função ou método. O exemplo abaixo mostra como podemos inicializar utilizando a sintaxe curta.

package main
 
import "fmt"
 
func main() {
        name := "Alexandre Awadallak"
}

No exemplo acima passamos a utilizar o operador :=, com ele não precisamos inicializar uma variável utilizando a palavra-chave, assim como não é necessário informar o tipo da mesma.

signature