Para escrever nossos programas na linguagem go, precisamos saber como declarar variáveis e constantes que vão armazenar os dados processados. Nesta parte do tutorial vamos aprender sobre o assunto.

Os conceitos sobre variáveis, constantes e escopo também foram vistos em Portugol e C.

A linguagem Go, utiliza a palavra reservada var para reconhecer a declaração de uma variáveis, porém o uso é opcional.

Sintaxe
var nome_variavel tipo_de_dado[;]
Exemplo 1
package main
import "fmt"

func main(){
  var nome1 string;
  var nome2 string
}

A linguagem Go permite que essa declaração seja feita em apenas uma linha. A sintaxe é semelhante ao que foi visto no exemplo acima. Nesse tipo de declaração os nomes das variáveis são separados por ",".

Sintaxe
var nome_variavel1, nome_variavel2, nome_variavelN tipo_dado[;]
Exemplo 2
package main
import "fmt"

func main(){
  var nome1,nome2 string
}

A atribuição de valor a uma variáveis é feita utilizando o operador (=):

Sintaxe
nome_variavel1 = valor;
var nome_variavel1, nome_variavel2 string = valor2, valor1;
Exemplo 3
var nome1, nome2 string = "nome1", "nome2"

As variáveis não iniciados no momento de sua declaração recebem o valor default associado ao seu tipo de dado

Exemplo 4
var codigo int; //0 será atribuído

A linguagem Go possui, assim como Lua, Python e Javascript, possui a característica de inferência de dados. Isso significa que quanto declaramos uma variável não precisamos declarar seu tipo. A inferência é feita ao associarmos um valor inicial à variável.

Sintaxe
var nome_variavel tipo_de_dado[;] //sem inferência
var nome_variavel = valor[;] // com inferência
Exemplo 5
var nome1 = "string"

O operador (:=) pode ser utilizado para declaração e atribuição valor a uma variável. Dessa forma, não é necessário a utilização de palavra reservada var e o tipo de dado da variável. A inferência é feita baseada no valor atribuído.

Sintaxe
nome_variavel:=valor[;]
nome_variavel1,nome_variavel2 := valor1,valor2
Exemplo 6
nome1 := "string"

Go nos permite declara variáveis utilizando um bloco var. Assim, podemos declarar um grupo de variáveis de tipos diferente. Utilizando a sintaxe abaixo, não é possível utilizar o operador (:=).

Sintaxe 1
	var (
		nome_var1 = valor1
		nome_var2 = valor2
		nome_varN = valor3
	)
Sintaxe 2
	var (
		nome_var1 tipo_dado1
		nome_var2 tipo_dado2
		nome_var3 tipo_dado3
	)

Exemplo 6
var (
	nome1  string
	codigo int
	ok     bool
)

Além das variáveis, Go nos permite criar constantes de forma semelhante às variáveis vistas anteriormente. As diferenças estão no uso da palavra reservada const e não é possível utilizar o operador ":=" e uma constante que deve obrigatoriamente possuir um valor inicial em sua declaração.

Sintaxe
const nome_constante tipo_de_dado = valor[;]
const nome_constante1,nome_constante2 tipo_dado = valor1,valor2,valor3[;]
const nome_constante1 = valor1[;]
Exemplo 7
const CONSTANTE int = 777

A lingaguem Go nos permite declara variáveis utilizando um bloco const. Assim, podemos declarar um grupo de constantes de tipos diferentes.

Sintaxe 1
	const (
		nome_var1 = valor1
		nome_var2 = valor2
		nome_varN = valor3
	)
Sintaxe 2
	const (
		nome_var1 tipo_dado1 = valor1
		nome_var2 tipo_dado2 = valor2
		nome_var3 tipo_dado3 = valor3
	)
Exemplo 6
const (
	constante1 = 1
	constante2 = "constante2"
	constante3 = 1.99
)

Para a crição de variáveis e constantes na linguagem Go, precisamos entender como funcionam seus escopos locais e globais e como funciona seus acessos.

Para a linguagem Go, quando criamos uma função, as variáveis criadas dentro dessa função são consideradas variáveis locais. Esse tipo de variável é criada durante a execução da função e são destruídas ao término da execução.

Exemplo 7
package main
func main() {
	var vlocal string
}

Variáveis que são declaradas fora da função main ou outro arquivo .go são variáveis globais. Durante a execução de um programa, esse tipo de variável irá existir em memória até o término do programa.

Exemplo 8
package main
var vglobal string
const CONSTANTE int = 777

func main() {
	var vlocal string
}

No exemplo cima, a váriváei valor1 é uma variáveis global pois está declarada fora da função main. O mesmo é válido para a constante CONSTANTE. O acesso a essa variável e constante só pode ser feito em qualquer parte do programa, funções e procedimentos, quando importadas.

Para dar nomes aos identificadores(variáveis, constantes, funções e etc), podemos utilizar as convensões Pascal, Snake ou Camel case.

Exemplo 9

nomeVariavel : Camel Case
NomeVariavel : Pascal Case
nome_variavel : Snake Case

As convensões Pascal, Snake e Camel Case já foi explicadas em Tutorial Portugol: Convensões no tutorial da linguagem Portugol.

A linguagem Go utiliza as convensões Camel Case e Pascal Case para encapsulamento que será visto em Package do Usuário.

Além da convensão, a linguagem Go utiliza as seguintes regras que são suportadas para dar nomes a variáveis, constantes, macros, funções e etc:

  1. Não deve conter espaço;
  2. Não deve iniciar com números;
  3. Não deve conter caracteres especiais, exceto underscore (_);
  4. Não utilizar palavras reservadas;
Exemplo 10

Nomes de identificadores incorretos

int 1idade;
var idade pessoa int[;]
var int int[;]
var #idade int[;]
Exemplo 11

Nomes de identificadores corretos

int idade;
var idade_pessoa int ;
var _idade int;

A linguagem Go, assim como todas as linguagens de programação, possue um conjunto de palavras reservadas que têm um significado único para a linguagem e não podem ser utilizadas na criação de variáveis, constantes e outros identificadores.

break case chan const
continue default defer else
fallthrough for func go
goto if import interface
map package range return
select struct switch type
var - - -

Algumas palavras reservadas não serão abordadas neste tutorial básico sobre Go sendo mencionadas em futuras atualizações.

Agora que já temos conhecimento sobre os tipos básicos de dados presentes na linguagem Go, vamos ver alguns exemplos de declaração de variáveis com os tipos já vistos.

Exemplo 12
var valor int = 999
var float float32 = 1.99
var string1 string = "string"
var vetor [3]int
var matriz [2][2]int
var flag bool = false
var uint8 = 0xff

Tipos de dados como vetor, matriz, struct e string serão melhor vistos em suas respectivas seções, Vetor, Matriz, Struct e String. As Estruturas de dados dinâmicas serão vistas em futuras atualizações.

  1. 16/09/2024 - revisão 3 - Ajustes gramaticais, Exemplo 7, Exemplo 8; Link portugol; outros ajustes
  2. 30/08/2024 - revisão 2 - Correção em links declaração de constantes e correção header de tópicos
  3. 02/10/2023 - revisão 1 - Correção em referências, erros gramaticais
  4. 21/08/2023 - versão inicial