Go! - Dando os primeiros passos com a linguagem Go.
Tags: go, beginners, braziliandevs, programming
Published: 2023-08-25 22:43:41

Nesse primeiro artigo, vamos falar sobre a linguagem Go e como dar os primeiros passos. Bom o motivo para eu começar a escrever sobre Go é que venho trabalhando com ela diariamente a um tempo e vejo ela como sendo muito boa de aprender, de usar e com diversas aplicabilidades por ser uma linguagem de uso geral, mas mesmo sendo de uso geral vale lembrar que ela não é bala de prata que resolve tudo e que tem cenários onde ela pode ser uma melhor opção que as demais. Vamos começar então dando um pequeno contexto sobre Go?

## Uma breve história de Go

Go é uma linguagem de programação criada em 2007 por 3 funcionários da Google na época, eles eram o Robert Griesemer, Rob Pike e Ken Thompson. Mas veio a ser lançada oficialmente pela Google em 2009. Desde então, tem ganhado popularidade entre os desenvolvedores de software, principalmente por sua eficiência e performance. Go é uma linguagem compilada e estática, com tipagem forte e estruturas de controle de fluxo comuns. Juntando essas características que comentei nós obtemos uma linguagem que nos dá uma facilidade de criar programas concorrentes.

Explicando um pouco sobre concorrência para você não ficar tão perdido, e de uma maneira bem resumida (coloque bem resumida aqui viu, pois a ideia é dar uma noção e não focar em programação concorrente): concorrência na programação é a habilidade e um programa executar mais de uma tarefa ao mesmo tempo. Agora aqui você pode estar perguntando porque chamei de concorrência e não de paralelismo certo? Se for assim explicarei em um outro artigo sobre concorrência e paralelismo em Go, beleza?

A linguagem Go nasceu junto com várias ferramentas já prontas, isso é fruto por ser uma linguagem nova onde os seus criadores já tiraram lições de outras linguagens e criaram ela já com muitas coisas em mente, que outras linguagens mais antigas ganharam ao longo de sua evolução. Assim a linguagem Go já vem com diversas ferramentas nativas, como seu compilador, e uma vasta lista de bibliotecas por padrão, ou como chamaremos mais a frente pacotes. A linguagem também já tem em si a proposta de simplicidade e boas práticas já desde a criação, facilitando a vida das pessoas que irão utilizar Go para desenvolver algo.

Pois bem, tirando agora o brilho de Go, podemos utiliza-la em outros casos, como criar uma API, ou um programa executável por linha de comando (as famosas aplicações por CLI) por exemplo. Inclusive, um detalhe interessante é que vejo a Go dividindo cenário em scripts com Python, que hoje ainda é uma linguagem muito usada para esses casos, mas não quer dizer que ela seja melhor ou pior, apenas que temos mais opções agora!

E assim podemos continuar neste artigo, onde vamos dar os primeiros passos com a linguagem Go, para dar uma pequena introdução. A ideia é criar outros artigos mostrando um pouco mais da linguagem Go, com uma abordagem e linguagem diferentes do que venho encontrando por aí. Vamos lá?

## Instalando a linguagem Go

Bem, antes de começar a programar em Go, é necessário ter a linguagem instalada em sua máquina. O processo de instalação é bem simples e pode ser feito através do site [oficial do Go](https://go.dev/). Para isso, após acessar o site oficial, devemos clicar no botão escrito *****************Download***************** na tela inicial (ele tá ao lado do botão amarelo escrito *******************Get Started*******************).

![Site oficial do Go](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4oarvejg5aad8p64aohg.png)

Assim, basta agora escolhermos o download compatível com a nossa máquina, seja ela Windows, MacOS ou Linux. Para Windows e MacOS, Go já vem empacotado em um instalador, onde precisa apenas abrir o instalador e seguir o fluxo de instalação. Já para Linux vai ser preciso usar um terminal para extrair, adicionar o executável ao $PATH. Todas as instruções podem ser encontradas aqui na [página de instruções do site](https://go.dev/doc/install).

Após instalado, podemos validar se tudo ocorreu bem executando o seguinte comando em algum terminal: `go version` . Se tudo correu bem, você verá uma mensagem no terminal parecida com essa `go version 1.20 linux/amd64` nela podemos ver a versão que instalamos, o sistema operacional e a arquitetura do processador que o nosso sistema usa.

## Escrevendo nosso primeiro programa: Hello, World!

Assim como em outras linguagens de programação, quando estava aprendendo sobre ela, o primeiro programa que sempre escrevemos é o famoso "Hello, World!" e iremos manter essa tradição, pois lembro bem do que um professor meu de Java me falou uma vez: 

Agora vamos abrir o editor de código que temos a disposição. Aqui pode ser o que você se sentir mais confortável em usar, ok? Eu recomendo o Visual Studio Code com os plugins de Go e o Intellij Community também com os plugins de Go. Ambos são incríveis e gratuitos

Agora com o editor aberto, vamos escrever o código abaixo:

```go
package main

import "fmt"

func main() {
    fmt.Println("Olá, Mundo!")
}

```

Salve o arquivo como `ola.go` , abra um terminal e no terminal entre dentro da pasta onde está o arquive que acabamos de criar. Em alguns sistemas podemos entrar na pasta do nosso arquivo e com um duplo clique em qualquer local da pasta procurar alguma opção que diga algo como “Abrir no terminal” como ocorre no Windows por exemplo. Em seguida execute o arquivo através do comando `go run ola.go` e assim você deve ver a mensagem "Olá, Mundo!" no terminal. Parabéns, você acaba de escrever, compilar e executar o seu primeiro código em Go!

## Entendendo como funciona a estrutura de um código Go

Agora que já criamos o nosso primeiro código em Go, vamos entender como funciona a estrutura do nosso código. Para isso vamos criar o nosso segundo código em Go! Para isso, basta copiar o código abaixo no seu editor.

```go
package main

import (
	"fmt"
	"time"
)

func main() {
	var resposta string
	idade := 45

	fmt.Println("Estou validando a sua idade, aguarde um momento...")
	time.Sleep(5 * time.Second)
	resposta = verificarIdade(idade)
	fmt.Println(resposta)
}

func verificarIdade(idade int) string {
	if idade > 30 {
		return "Voçê é velho!"
	}
	return "Voçê está ficando velho!"
}
```

Salve o arquivo como `verificar-idade.go` . Agora vá novamente ao terminal e execute o comando `go run verificar-idade.go` , você verá que ele escreve a primeira linha **“Estou validando a sua idade, aguarde um momento...”** aguarda um pouco e escreve uma segunda linha, que deixarei para você descobrir qual é.

Agora vou explicar o que cada trecho do código faz. Na primeira linha temos o `package main` que indica em qual pacote estamos. Mas o que são pacotes? Você pode estar se perguntando sobre isso, mas de maneira resumida pois vamos falar mais para frente em outro artigo, pacotes são as pastas onde colocamos os nossos arquivos go lá dentro, no caso do pacote ***main*** ele é especial pois é nele que contém a nossa função também de nome ***main***, que é porta de entrada da nossa aplicação. Isso quer dizer que toda a nossa aplicação, tudo que escrevermos vai ter que ser chamado dentro da função principal de alguma forma. Mas não se preocupe agora com isso que veremos em como fazer isso mais para frente, ok?

Agora vamos para a próxima parte do código que é o trecho abaixo, do import:

```go
import (
	"fmt"
	"time"
)
```

Nele nós iremos chamar todos os nossos pacotes necessários para o nosso programa. Nesse caso estou chamando os pacotes padrões do Go, o pacote **fmt** e o **time** que me permitem formatar a saída de texto no terminal e trabalhar com tempo, respectivamente. Lembra que falei que Go vem com vários pacotes padrão? Então, veremos muito eles, além de pacotes nossos e pacotes de terceiros, como pacotes que trazem um framework para criar um site ou API.

Agora vamos falar das funções do código, as funções `main()` ******e `verificarIdade()`. 

```go
func main() {
...
}

func verificarIdade(idade int) string {
...
}
```

Sempre que quisermos declarar uma função ela terá esse nome func antes dela. Mas é simples assim, como no verificarIdade onde é uma função que recebe um parametro e devolve uma resposta em texto, legal né?! Claro que isso é só a ponta das funções, somente elas dá um artigo inteiro! Então para não termos muito trabalho agora e ficar extenso, vamos parar aqui e segui para a próxima parte. Algo legal de perceber também é que as funções de outros pacotes, como no caso do **fmt** e **time**, para acessar elas precisamos chamar elas usando o padrão [pacote].[função]. Como por exemplo a chamada das funções `fmt.Println()` e `time.Sleep()` .

Vamos falar das variáveis **resposta** e **idade** que foram declaras de formas diferente. 

```go
var resposta string
idade := 45
```

A variável **resposta** eu apenas declarei ela, mas não iniciei ela com um valor, ou seja não atribui nada, nenhum um textinho se quer já que ela é do tipo string. Não sabe o que é tipo string? Calma que eu explicarei em outro artigo só sobre os tipos de dados do Go! Pois bem, nesse caso da variável **resposta** a própria linguagem Go se encarregará de atribuir um valor padrão, que nesse caso é uma string vazia. Já para a variável idade, eu declarei ela já inicializando ela com um valor de 30. Mas que tipo seria esse 30? Se você se perguntou, pois lá no começo eu falei que Go é tipada, eu te respondo agora: a linguagem Go consegue inferir, identificar, que o tipo de 30 é de um número inteiro, no caso é o tipo int da linguagem. Temos outros tipos de número na linguagem, calma que vamos chegar lá. E a mágica do negócio de declarar e já atribuir um valor se dá devido ao operador **:=**. Que lembra um pouco o mascote da linguagem, não?

E por fim, dentro da função `verificarIdade()` um controle condicional, o famoso ****if****.

```go
func verificarIdade(idade int) string {
	if idade > 30 {
	return "Voçê é velho!"
	}
	return "Voçê está ficando velho!"
}
```

Onde podemos verificar se um valor atender uma validação nossa. Nesse caso verificamos se a idade é maior que 30 e se for nós devolvemos uma resposta em texto. Se a idade for menor ou igual a 30, mesmo eu não deixando explícito isso, fica implícito, a função retorna outra resposta. Pode testar aí e colocar uma idade menor que 30, como por exemplo 20.

## Conclusão

Neste artigo, demos os primeiros passos com a linguagem Go criando nossos dois primeiros programas, começamos a entender em como escrever um código em go, conhecemos um pouco da história e entendemos alguns pontos fortes dela. Continuaremos a jornada no mundo em outros artigos, então se quiser acompanhar mais pode se inscrever no blog para acompanhar os próximos artigos onde mostrarei mais sobre a linguagem como aprender sobre funções, tipos de dados, controles e laços, testes. Como também veremos além da linguagem, como aplicar SOLID em Go, como aplicar os padrões de projeto, os famosos ***************Design Patterns***************, e até arriscaremos práticas de arquitetura também.

Espero que este artigo tenha sido útil para você começar a programar em Go! Se tem sugestão de algum tema que queira ver com a linguagem Go, sobre desenvolvimento de softwares entre outros temas, deixe nas minhas redes sociais que estarei trazendo aqui e compartilhando com todos!

## Referências

- Donovan, A. A., & Kernighan, B. W. (2016). A Linguagem de Programação Go. Novatec Editora.
- Go Website. Página oficial da Linguagem Go. Disponível em: https://go.dev/.
- Roadmap Golang Website. Página do site Roadmap específica para a Linguagem go. Disponível em: https://roadmap.sh/golang