A linguagem Go.

A linguagem Go.

Hoje vamos falar um pouco sobre a linguagem Go, que vem ganhando o seu espaço no

mercado de trabalho e no mundo de Software Livre.

Arquitetada por Rob Pike, Robert Griesemer e Ken Thompson, a linguagem foi criada como resposta às dificuldades que os engenheiros de software da Google enfrentam no seu dia a dia: Processamento Multicore (Múltiplas unidades de processamento), Sistemas conectados via rede, cluster de computação massiva e o modelo de programação “Web” [1]. (Vale a pena pesquisar sobre seus criadores para ver as suas “pequenas” contribuições no mundo da tecnologia).

Logo, a linguagem foi construída desde o início visando tratar estes problemas: oferecendo suporte nativo de criação, sincronização e comunicação de softwares que precisam trabalhar com vários processos/threads [1], e também oferecendo bibliotecas que são mantidas pela própria comunidade da linguagem, como, por exemplo, pacotes para trabalhar com Persistência de Dados: Escrita de Arquivos e banco de dados (SQL); e Protocolos de comunicação: TCP, UDP e HTTP (também conhecido como protocolo da web).

Além disso, Go foi “desenhada” pensando em melhorar a produtividade durante o desenvolvimento de softwares desde sua escrita até sua manutenção, levando como base as experiências adquiridas em criar e operar sistemas de grande escala [1]. Podemos dizer então que Go foi construída sob a visão de Engenheiros de Software que desenvolvem e operam sistemas em produção e larga escala. Por “larga escala” estamos falando da escala do Google, onde a linguagem foi criada.

O design da linguagem, que é até considerado controverso por alguns, tem como objetivo ser simples, conciso e regular para diminuir a curva de aprendizado e facilitar a contribuição durante o desenvolvimento, como, por exemplo: favorecendo a simplicidade e mantendo uma regularidade de como softwares são escritos; todo mundo escreve os programas, mais ou menos, da mesma forma!

Por exemplo, para realizar a criação de um processo concorrente, podemos escrever a seguinte linha de código (isso mesmo “LINHA” no singular):

      go EscreverArquivoNoDisco(arquivo)

Esta linha irá dizer ao computador que queremos que a função EscreverArquivoNoDisco(arquivo) seja executada de forma independente, podendo até ser executada de forma paralela com outras instruções. Imagine que isso criará uma “thread” no sistema operacional para executar o código desta função (na verdade, isso não necessariamente cria uma thread no sistema, porém, isso eu deixo para um segundo material, com exemplos, atividades e de mais ou menos 40 horas de duração).

Obviamente, a simplificação da escrita de programas não resulta diretamente em

sistemas mais simples, já que as complexidades de multiprocessamento e sincronia

ainda existem, porém Go procura facilitar o desenvolvimento destes programas.

A simplicidade, em alguns casos, pode tornar o programa até um pouco mais prolixo,

ou usando jargão técnico: mais “verbose”; porém, seus criadores argumentam que a

simplicidade e regularidade oferecem mais benefícios durante a operação de sistema,

principalmente para _debuggar_ os códigos [1]

Go no mundo do Software Livre

Pelo fato da linguagem Go ser, inicialmente, desenvolvida para ser utilizada na criação de sistemas voltados para infraestrutura, ela se tornou uma das linguagens mais utilizadas em sistemas que atuam neste domínio. Como orquestração de containers: Docker, Kubernetes, OpenShift, Nomad; Monitoramento de sistemas: Prometheus, TICK Stack (telegraf, kapacitor, influxdb, chronograf; Banco de dados: InfluxDB, Etcd, CockroachDB; e, principalmente, para sistemas Cloud Native (nativos para computação em nuvem), que, para esse artigo, vamos definir como: aplicações que foram construídas para aproveitar o máximo das funcionalidades que a computação em nuvem nos oferece.

Olhando para os projetos da Cloud Native Computing Foundation (também conhecida como CNCF), podemos listar ferramentas como: ContainerD, Kubernetes, CoreDNS, etcd, Harbor, Helm, Jager, Open Policy Agent, Prometheus, Rock e Vitness, que são escritas majoritariamente em Go, contabilizando em 11 dos 15 projetos que são considerados “maduros”1 pela instituição.

1Para a Cloud Native Computing Foundation, projetos “maduros” ou que atingiram um nível de maturidade, o seu nível mais alto, são projetos que atendem a alguns requisitos que são considerados importantes para um sistema. Dentre eles, podemos listar: ter desenvolvedores de organizações diferentes, ter realizado um processo de auditoria de segurança, ter um processo definido para contribuições open source e ter voto majoritário do comitê técnico da própria instituição.

Regras definidas em https://github.com/cncf/toc/blob/main/process/graduation_criteria.adoc

Projetos da Cloud Foundation cujo 11 dos 15 são escritos, majoritariamente, na linguagem Go

Para a Cloud Native Computing Foundation, projetos “maduros” ou que atingiram um nível de maturidade, o seu nível mais alto, são projetos que atendem a alguns requisitos que são considerados importantes para um sistema. Dentre eles, podemos listar: ter desenvolvedores de organizações diferentes, ter realizado um processo de auditoria de segurança, ter um processo definido para contribuições open source e ter voto majoritário do comitê técnico da própria instituição.

Regras definidas em https://github.com/cncf/toc/blob/main/process/graduation_criteria.adoc

Ferramentas que são mantidas por empresas como HashiCorp, Docker Inc, Grafana Labs e InfluxData também escolheram Go como linguagem para desenvolver os seus produtos: Moby (antigo core do Docker), Docker, Grafana, InfluxDB, Telegraf, Consul, Terraform, Vault, Traefik, Nomad, Consul, além de muitos outros produtos que utilizam Go para aproveitar suas qualidades.

Go no mercado de trabalho

De acordo com “2020 Developer Survey”, pesquisa realizada pela empresa StackOverflow que teve aproximadamente 65 mil participantes ao redor do mundo, a linguagem Go foi classificada como a terceira linguagem de maior interesse para ser aprendida, depois de Python e JavaScript.

2020 Stack Overflow Developer Survey: Dados sobre as

linguagens que os desenvolvedores estão

mais interessados para aprender

Nesta mesma pesquisa, Go foi listada como a 5° linguagem mais adorada pelos programadores, e a 11° mais popular entre todas as linguagens de programação. Levando em consideração que é uma linguagem que teve sua primeira versão (1.0.0) lançada há pouco mais de 10 anos no mercado (em meados de 2012), podemos notar como ela ganhou espaço rapidamente entre os desenvolvedores e a comunidade open source.

Outro número expressivo que podemos ressaltar para Go nesta pesquisa é a relação entre salário e tecnologia. A linguagem está em terceiro lugar nas tecnologias utilizadas entre os funcionários mais bem pagos, o que indica o crescimento e a procura por profissionais que possuem competência nesta linguagem.

Go é a terceira linguagem mais utilizadas

entre os profissionais mais bem pagos

Além da Google, Go também está sendo utilizada por outras empresas ao redor do mundo. De acordo com GoUsers, lista mantida pela própria comunidade da linguagem, empresas como Amazon, AT&T, BitBucket, Booking.com, Canonical, CoreOS, Datadog, HP, Red Hat e Tumblr desenvolvem sistemas internos ou públicos na linguagem. No Brasil temos 99Taxix, Catho, Globo.com, Ifood, Magazine Luiza, Nic.br, PicPay, Stone Pagamentos e Walmart também listadas como seus usuários.

Conclusão

Levando em consideração que esta linguagem foi criada há pouco mais de 10 anos, Go já ocupou o seu espaço no mercado de trabalho e na comunidade de Software Livre, sendo escolha de inúmeros projetos open source e cloud native que estão sendo utilizados por milhares de usuários e empresas no mercado de tecnologia atual.

Sua simplicidade, além do suporte nativo de multiprocessamento, é um dos motivos pelos quais Go ganhou o seu espaço no coração dos desenvolvedores, seguindo um dos objetivos principais da linguagem: tornar o desenvolvimento de softwares modernos mais simples, rápido e produtivo!

Conheça o novo curso da 4Linux de Programação em Linguagem Go para Desenvolvimento de Serviços.

Referencias

[1] PIKE, Rob. Go at Google: Language Design in the Service of Software Engineering. 2012. Disponível em https://talks.golang.org/2012/splash.article.

[2] STACK Overflow – Empresa de Fórum e Comunicação para áreas de TI e desenvolvimento em geral. 2020 Developer Survey. Disponivel em: https://insights.stackoverflow.com/survey/2020

[3] Cloud Native Computing Foundation. Projeto da Linux Foundation e tem como objetivo democratizar projetos e definições de ferramentas open source.


CURSOSCONSULTORIA

 

Anterior Integrando seu chat com o Rocket Omnichannel
Próxima Integrando Telegram ao Rocket.Chat

About author

Rafael Oliveira Silva
Rafael Oliveira Silva 1 posts

System Engineer (Devops Engineer) that likes challenges, sometimes even solving them. Experienced with System Automation, Configuration Management, Software CI/CD and Monitoring, mostly focused on Cloud Infrastructure and Open Source Software. Using experience from both development and operations side to improve development lifecycle, monitoring & troubleshooting. Open Source Enthusiast and from time to time contributor. Github: github.com/raffs

View all posts by this author →

Você pode gostar também

Desenvolvimento

API RESTful com Laravel

Nessa série de artigos veja como construir uma API RESTful para consulta de usuários em uma base de dados com ajuda do frawework Laravel. Mostrei como montar toda estrutura necessária,

Desenvolvimento

Zend: a ferramenta certa para o trabalho certo!

Se você está lendo este artigo provavelmente você já desenvolveu ou pretende desenvolver algum projeto de software. Talvez você nunca tenha usado um framework mesmo que não o Zend antes

DevOps

Automatização de Infraestrutura – DevOps e Python

Automatização de Infraestrutura – DevOps e Python Hoje em dia os profissionais de TI estão olhando cada vez mais para DevOps e Python. Se você quer saber por que a