Embora pareça um assunto sem muito conteúdo, é muito importante saber alguns detalhes de como trabalhar com variáveis em Go.
A primeira coisa que precisamos saber sobre variáveis em Go, é que elas tem escopo, ou seja, dependendo de onde ela for criada você estará limitando os locais em que ela estará disponível.
No exemplo abaixo, vamos criar 3 variáveis com 3 escopos diferentes.
var connection = database.Connect() func Insert(data interface{}) string { err := connection.Create(data) if err != nil { msg := fmt.Sprintf("falha ao tentar inserir: %v", err) return msg } return "inserido com sucesso sucesso!" }
connection: Essa variável tem um escopo global, ou seja, estará disponível para ser utilizada em qualquer parte do package onde ela foi criada.
err: Tem um escopo de função, ou seja, ela estará disponível para ser utilizada somente dentro da função que ela foi criada.
msg: Por ela ter sido criada dentro de um if, essa variável só estará disponível dentro do if onde foi criada. Isso também serve para switch/case e for.
Outra forma comum de declaração de variáveis que podemos encontrar, é a declaração na condicional de um if, for ou switch/case.
if err := connection.Create(data); err != nil { return err }
Assim como a variável msg do primeiro exemplo, quando declaramos variáveis na condicional de um comando, ela só estará disponível dentro do escopo do comando onde ela foi declarada.
Em todos os exemplos que demos até aqui, declaramos as novas variáveis já atribuindo um valor à elas. Mas essa não é a única forma de fazer. Podemos declarar uma nova variável sem atribuir um valor à ela.
func GetMessage(valor string) string { var message string switch valor { case "a": message = "Primeira mensagem" case "b": message = "Segunda mensagem" } return message }
Assim como fizemos no exemplo acima, onde declaramos a variável message só definindo seu tipo de dados. Notem que, por ela já ter sido declarada no inicio da função, usamos o =
para atribuir o valor ao invés do :=
.
Isso por que quando atribuímos um valor usando o :=
, o Go vai criar uma nova variável e depois atribuir o valor à ela. Já o =
, só atribui um valor a uma variável já iniciada.
var inicial string = "Inicio" final := "Fim"
No exemplo acima, as duas variáveis são do tipo string. A diferença é que na primeira deixamos explicito, enquanto na segunda deixamos o compilador atribuir o tipo.
Uma observação importante a se fazer é que, independente de você deixar explicito ou implícito o tipo da variável, em Go as variáveis NÃO MUDAM SEUS TIPOS APÓS INICIADAS.
Para finalizar, vou deixar um último exemplo de como podemos iniciar um grupo de variáveis.
var ( message string = "OK" idade int8 = 31 db Connection )
Deixem suas dúvidas nos comentários.
Até a próxima!