GoLang, desbravando uma linguagem de programação - Parte 1

GoLang, desbravando uma linguagem de programação - Parte 1
Image from: http://kirael-art.deviantart.com/art/Go-lang-Mascot-458285682
Já faz muito tempo que não escrevo um artigo, mas já fazia algum tempo que queria voltar a escreve-los. Hoje resolvi aprender uma nova linguagem de programação e também documentar esse processo na esperança de talvez poder ajudar alguém, não só aprender a própria linguagem Go, como qualquer outra linguagem de programação. Esta série de artigos não tem a pretensão de ser um guia definitivo, ou um super manual da linguagem, mas sim descrever como eu aprendo uma nova linguagem, pontos importantes e minhas impressões da mesma. Bom então vamos lá…

O que é Go

Go é um projeto de código aberto, multiplataforma, desenvolvido e mantido pelo time do Google além de outros contribuidores e distribuído com a licença BSD. O projeto nasce com o objetivo de tornar seus programadores mais produtivos e ser uma linguagem expressiva, concisa, limpa e eficiente. Bom, isso é o que está descrito em sua documentação, por hora vamos apenas acreditar :) . Podemos encontrar mais informações sobre o projeto aqui.

Leia a documentação da linguagem, esse é o primeiro passo para entender o que é e o que esperar ao aprendê-la.

Saber os objetivos do ecossistema é fundamental para entender onde é possível e viável usar a linguagem. Perceba que entender isso é como conhecer qualquer ferramenta que se proponha a usar, tentar apertar um parafuso com um martelo tende a não dar muito certo 😁.

E porque os objetivos do ecossistema e não da linguagem?

Bom, esse é um erro muito comum para iniciantes. É fundamental perceber que o que limita o uso de uma linguagem, não é sua sintaxe. No geral a linguagem e seu ecossistema nascem e evoluem em um mesmo objetivo, porém é possível que isso mude com o tempo. O JavaScript é um exemplo muito claro disso, foi por muito tempo uma linguagem limitada ao browser, com aplicabilidade apenas em sistemas web, porém esse cenário mudou completamente após a chegada do NodeJs, hoje vemos JavaScript para todos os lados, seja em servidores ou até em pequenos dispositivos embarcados.

Uma impressão inicial, e que me agrada bastante, é que logo no inicio de sua documentação, Go deixa claro ter seu foco em aproveitar o máximo de maquinas multicore e em rede, esse objetivo é super importante, porque iniciar em um ecossistema que não trabalha bem com escalabilidade seja ela vertical ou horizontal é hoje na minha visão uma perda de tempo na grande maiorias dos casos.

Outro ponto que me interessou bastante é o fato de Go ser é uma linguagem com tipagem estática e compilada, o que destoa bastante das linguagens que venho trabalhando nos últimos tempos, e pode ser um trufo interessante em novos projetos.

Entendendo a sintaxe básica da linguagem

Ao iniciar em uma linguagem é importante entender sua sintaxe básica e sempre que possível suas origens. Quase todas as linguagens modernas não começaram do zero, foram inspiradas em linguagens já existentes. Traçar sua ancestralidade ajuda a criar familiaridade mais rapidamente caso já possua domínio de outra com ancestral comum. Por exemplo, linguagens baseadas em C tendem a ter características em comum e quanto antes perceber isso, mais rápido vai se sentir a vontade na nova linguagem.

Go é um exemplo disso, muito de sua sintaxe é semelhante ao C, com pequenas mudanças como a falta de parênteses em volta de estruturas como for e if por exemplo. É super tranquilo se adaptar as mudanças.. abaixo um exemplo de código Go.

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello World")
}

Todos os detalhes da Especificação da linguagem podem ser encontrados aqui, é sempre bom dar uma olhada, mas essa documentação pode e deve ser consultada sempre que alguma dúvida aparecer.

A documentação da especificação do Go é muito detalhada e bem escrita, eu realmente me senti confortável ao fazer uma leitura rápida da mesma.

Configurando o ambiente de desenvolvimento

Para iniciarmos em uma nova linguagem, quase sempre, precisamos de um ambiente bem configurado de forma possibilitar a fluides no aprendizado. Hoje dificilmente instalo qualquer ambiente diretamente em minha maquina, por algum tempo usei o Vagrant para isso, porém hoje tenho trabalho quase exclusivamente com o Docker, ele possibilita testar e descartar sempre que não uso mais qualquer ambiente, deixando minha máquina sempre livre. Outro ponto importante é que consigo reproduzir o exato ambiente ao qual o sistema vai rodar quando em produção, evitando problemas de compatibilidade no momento em que coloco o sistema no ar.

O intuito desse artigo não está em usar o Docker, assim apenas me limitarei a mostrar os passos feitos e não a explica-los a fundo, mas sugiro fortemente que tire um tempinho para dominar ele, provavelmente vai ser um divisor de água no seu dia a dia como desenvolvedor.

Para iniciarmos o projeto criei um arquivo chamado “docker-compose.yml” na raiz do projeto com o seguinte conteúdo:

1
2
3
4
5
6
7
version: "2"
services:
app:
image: golang:1.9-stretch
volumes:
- ./:/go/src/learning-go-lang
working_dir: /go/src/learning-go-lang

Esse arquivo é responsável por inicializar com as configurações adequadas o contêiner docker para a aplicação.

Posteriormente criei um arquivo de nome de “main.go” ainda na raiz do projeto com o seguinte conteúdo:

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello World")
}

Tudo finalizado e configurado, basta executar o comando “docker-compose run app go run main.go”, esse comando ao ser rodado a primeira vez baixa o container configurado no arquivo “docker-compose.yml” e posteriormente executa o arquivo main.go. (Esse processo pode demorar um pouco a primeira vez, dependendo de sua conexão com a internet, porém nas demais o processo é super rápido).

Assim, após finalizado o processo, todo o ambiente configurado e pronto para começarmos os trabalhos devera gerar o tão esperado Hello World em sua última linha.

Próximos Capítulos

Para continuação dessa série alguns dos próximos passos serão, entender melhor como funciona o sistema de Gerenciamento de Dependências do Go, todos os projetos, quase sem exceção dependem de ferramentas externas, Go parece ser bem completo, mas ter e entender como funciona seu gestor de dependência é fundamental.

O passo seguinte será identificar se existem e quanto maduro são os frameworks disponíveis para a linguagem, por fim minha ideia é criar uma API simples usando os principais conceitos da linguagem e posteriormente a levar para produção para que seja possível perceber as dificuldades envolvidas no processo.

Bom por hoje é isso, em breve seguimos..

Click aqui para acessar a segunda parte do artigo!!

Ou

Click aqui para acessar a terceira e ultima parte do artigo!!

Comentários

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×