Introdução ao GoLang
Olá leitor, seja muito bem vindo a mais uma jornada do Portal da Micilini 🥳
Se você ainda não conhece a plataforma, recomendo acessar este link, e mergulhar nos milhares de conteúdos que disponibilizamos de forma gratuita para você 😀
Nesta jornada, você vai mergulhar de cabeça na linguagem da Google que vem crescendo a cada ano, o famoso GoLang!
Neste conjunto de lições, vamos aprender desde o básico da linguagem, até coisas mais avançadas, como o uso de concorrência, paralelismo Multithreading e entre outras 🫡
Porém, antes de aprendermos a criar variáveis, funções, ponteiros, websites... é extremamente necessário que você entenda a história da linguagem, junto com todos os seus benefícios e complexidades.
Entretanto, antes de aprender GoLang, você precisa preencher alguns requisitos mínimos, são eles:
- Ter uma noção básica de como funciona um computador,
- Ter conhecimentos básicos sobre lógica de programação,
- Ter conhecimentos básicos sobre o funcionamento de uma aplicação web,
- Ter conhecimentos básicos sobre
HTML
,CSS
eJavascript
(opcional)
Caso você queira mergulhar no mundo do Javascript
, nós temos uma jornada bem completa que vai te explicar alguns conceitos importantes sobre a utilização dessa linguagem, vale a pena conferir! 🤓
Preencheu todos os requisitos? Então partiu começar com o pé direito em GoLang!
Preparado?
Quem será o seu professor?
Olá para você que está chegando agora, meu nome é William Lima e sou um dos criadores de conteúdo aqui no Portal da Micilini.
E serei eu quem estarei ministrando toda essa jornada do início ao fim 🙃
Trabalho com desenvolvimento de sistemas desde 2011, e já passei por diversos projetos ao longo da minha vida.
Aproveita e me segue lá no Linkedin, que é a plataforma onde posto novos conteúdos regularmente 😋
Ah... e não se esqueça de se inscrever em nosso Canal do Youtube.
O que é o GoLang?

Como você já deve imaginar, GoLang é uma linguagem de programação, também conhecida por Go, de código aberto, e que foi criada pela Google pensando em ser simples, eficiente e totalmente escalável.
Diferente de outras linguagens, o GoLang é uma linguagem compilada, e não interpretada, o que faz com que seu desempenho, seja relativamente superior a algumas outras linguagens disponíveis no mercado.
Ela foi projetada, para atender às necessidades de sistemas modernos, focando sempre no desempenho da aplicação e a produtividade das mesmas.
Um fator importante, é que a linguagem GoLang, é estaticamente tipada, e possuí uma sintaxe inspirada em C, ao mesmo tempo que oferece recursos mais modernos tornando o desenvolvimento mais rápido e extremamente confiável.
Apesar de ter uma sintaxe inspirada em C, o GoLang possui uma sintaxe tão simples, quanto vemos em algumas outras linguagens como é o caso do Javascript
e Python
, portanto, sem medo de usar GoLang 😆
É importante ressaltar que essa linguagem, apesar de "nova", ela foi construída para resolver os problemas que a Google possuí (ou possuía naquela época), mas daí você pode estar se perguntando... que tipo de problemas são esses?
Durante muito tempo, a Google utilizava bastante as linguagens C/C++
para criar aplicações mais críticas, ou seja, aplicações em que o tempo de resposta deveriam ser extremamente rápidas.
E como C/C++
possuí uma alta complexidade (maior tempo de desenvolvimento) e uma grande gama de soluções para resolver um único problema (sim, você pode criar uma solução usando diversas funcionalidades diferentes).
Eis então, que a Google decidiu criar uma linguagem moderna, mais limpa, pequena, e robusta, e que resolvesse a maioria dos seus problemas, e foi assim que surgiu o GoLang 🥳
Como o GoLang foi criado, e por quem ele foi criado?

Tudo começou no ano de 2007, quando os desenvolvedores:
- Robert Griesemer (envolvimento no compilador de Javascript V8 da Google)
- Rob Pike (Co-autor de sistemas Unix)
- Ken Thompson (Criador do Unix e do sistema B, precursor do C)
Estavam insatisfeitos com as linguagens existentes, pelo simples fato delas apresentarem lentidão durante a compilação em grandes projetos, junto com a complexidade crescente da linguagem C++,
atrelados a baixa eficiência que essas linguagens tinham em lidar com programação paralela e recorrente.
E foi somente no ano de 2009, que a versão 1.0.0 do GoLang foi lançada para o público em geral!
É importante ressaltar, que o GoLang foi criado em um período onde o sistema multi-core (processadores com mais de um núcleo), estavam se tornando populares, e por incrível que pareça, nenhuma das linguagens da época, sabia lidar tão bem com esses processadores quanto o GoLang.
Dito isso, esse grupo de desenvolvedores, decidiu criar uma linguagem mínima, ao mesmo tempo que não tivesse muitas formas diferentes de se fazer a mesma coisa (como acontece com C/C++), de forma a prezar pela sua simplicidade e minimalismo em sua sintaxe.
Eles se basearam em linguagens como: algol60
, pascal
, c
, modula
, modula-2
, oberon
, oberon-2
(GoLang foi fortemente baseada nela) e entre outras.
Como a linguagem GoLang é uma linguagem C-Like, isto é, uma linguagem de programação baseada em C, você também vai se deparar com conceitos sobre OO, Generics, poliformismo, e entre outras funcionalidades (mesmo a linguagem não ser orientada a objetos).
Entretanto, apesar do GoLang não ser uma linguagem funcional, ela te permite que você utilize alguns conceitos existentes na programação funcional.
Mas o que vem a ser uma programação funcional?
Por que GoLang não é uma linguagem funcional?
Antes de entrarmos neste assunto, é de vital importância que você saiba o que é uma linguagem de programação funcional.
Uma linguagem de programação funcional, é um paradigma de programação onde as funções são tratadas como cidadãos de primeira classe, onde a ênfase está em expressões e declarações que descrevem como os dados devem ser transformados de maneira declarativa.
Isso significa, que diferente das outras linguagens que você está acostumado a trabalhar por aí, as linguagens funcionais, contam com variáveis são imutáveis, e que não pode ser alteradas, as funções são feitas da forma mais pura possível. E em vez de existirem laços de repetição (como for ou while), tudo isso é feito usando recursão para iterar sobre os dados.
Abaixo você encontrará algumas das linguagens de programação funcional mais conhecidas do mercado:
Haskell
Lisp
Erlang
Clojure
F#

Mas caaaaalma! 😮
Isso não significa que o GoLang é um bicho de sete cabeças, pois como dito anteriormente, ELE NÃO É UMA LINGUAGEM DE PROGRAMAÇÃO FUNCIONAL!
Apesar de aceitar alguns conceitos desses tipos de linguagens rs
Sendo assim, o GoLang foi projetado como uma linguagem imperativa, com foco em instruções sequencias e estado mutável, não possuindo certos elementos e características de linguagens funcionais puras, como é o caso das funcionalidades:
Imutabilidade Estrita: Embora você possa evitar a mutação de estados, GoLang não força a imutabilidade.
Suporte nativo a funções de ordem superior: O GoLang permite funções de ordem superior, mas elas não são tão convenientes quanto em linguagens como JavaScript
.
Sem Garantia de Pureza: Funções em GoLang podem ter efeitos colaterais (como é o caso de alterar uma variável global ou gravar em um arquivo), enquanto linguagens funcionais puras proíbem isso.
Apesar disso, você pode sim, incorporar alguns conceitos da programação funcional em GoLang, mesmo que a linguagem não tenha suporte nativo para tais paradigmas.
O que é concorrência e paralelismo?
Como dito acima, o GoLang é uma linguagem de programação que foi feita pensada em concorrência e paralelismo, mas o que vem a ser esses dois conceitos?
E não, como muitos dizem por aí, concorrência não é a mesma coisa que paralelismo, e vamos ver o porque!
Quando falamos em concorrência, estamos nos referindo a capacidade em que uma determinada aplicação, tem de lidar com várias tarefas ao mesmo tempo de forma eficiente, isto é, atuando de forma inteligente o suficiente para ficar se alternando entre elas.
No caso do GoLang, a concorrência é implementada com as funcionalidades de GoRoutines e Channels, ambos assuntos que veremos mais a diante nesta jornada 😁
Já quando falamos em paralelismo, estamos nos referindo a execução de várias tarefas ao mesmo tempo, que estão sendo executadas em processadores ou núcleos diferentes.
Paralelismo é uma forma especifica de concorrência que depende de hardware multicore (processadores que contam com diversos núcleos).
Vamos ver um exemplo prático?

Para que você possa entender melhor, imagine que a concorrência é um chef de cozinha, gerenciando várias pratos diferentes ao mesmo tempo, dando atenção a cada uma delas conforme necessário.
E paralelismo, é como ter vários chefs de cozinha, cada um cuidando de uma prato ao mesmo tempo, ou seja, cuidando apenas do seu próprio prato.
O que é, e quais as diferenças entre uma linguagem compilada e interpretada?
Anteriormente, foi dito que o GoLang é uma linguagem compilada, e não interpretada, mas você sabe a principal diferença entre ambas?
A principal diferença, se dá no processo de execução do código, e na forma como ele é transformado em código de máquina, isto é, um formato em que o computador consiga executar.
Em linguagens compiladas, o código-fonte é traduzido para código de máquina (ou código intermediário), por um compilador antes dele mesmo ser executado.
O processo de compilação, acontece uma única vez, fazendo com que o código possa ser executado inúmeras vezes sem a necessidade de recompilação.
Já em em linguagens interpretadas, o código-fonte é executado diretamente por um interpretador, que lê o código linha por linha (ou bloco por bloco) e o executa em tempo real, sem a necessidade de uma tradução para código de máquina antes da execução.
Resumindo tudo o que eu disse acima, podemos dizer que:
- Em linguagens compiladas: O código-fonte é traduzido completamente para código de máquina antes da execução (como nas linguagens C, C++). O processo ocorre uma única vez, e o código compilado pode ser executado repetidamente.
- Em linguagens interpretadas: O código-fonte é traduzido em tempo real, ou seja, o interpretador lê e executa o código diretamente, sem gerar um arquivo binário compilado (como nas linguagens Python, Ruby e JavaScript).
Agora com relação ao desempenho, é certo dizer que em linguagens compiladas, sua aplicação funciona de forma mais rápida, pois o seu código já está em formato de máquina.
Diferente das linguagens interpretadas, em que o desempenho acontece de maneira mais lenta, pois a tradução ocorre durante o processo de execução.
Em aplicações simplistas, como a maioria que vemos por aí, não há problema algum em se optar por linguagens interpretadas, pois para os usuários, ele não notará lentidão. Mas a medida em que tais aplicações vão ficando cada vez mais complexas, o desempenho pode ser afetado.
Características Principais do GoLang

Deixo com você, algumas das características principais dessa linguagem:
Simples e Legível: A sintaxe do GoLang é minimalista e intencionalmente simples, facilitando a curva de aprendizado.
Sistema de Tipagem Estática: Detecta erros em tempo de compilação, aumentando a confiabilidade do software.
Concorrência com Goroutines: Permite executar funções simultaneamente de forma eficiente usando goroutines
e channels
.
Compilação Rápida: O compilador do GoLang é incrivelmente rápido, ideal para grandes projetos.
Gerenciamento de Memória: Inclui coleta de lixo (garbage collection), eliminando a necessidade de gerenciamento manual de memória.
Bibliotecas Robustas: Vem com suporte embutido para redes, criptografia, manipulação de arquivos e mais.
Cross-Compilation: Permite compilar binários para múltiplos sistemas operacionais a partir de uma única máquina.
GoLang é uma linguagem mais voltada para back-end ou front-end?
Embora a linguagem esteja muito associada com o desenvolvimento de aplicações web, o GoLang pode atuar tanto como uma linguagem back-end, quanto também, pode ser utilizada em algumas partes do front-end ( dependendo do contexto).
Sendo assim, seu principal foco é voltado para back-end, ou seja, aplicações server-side, como é o caso de:
- APIs RESTful,
- Sistemas distribuídos e microserviços,
- Servidores Web e processamento de alta performance e concorrência.
Apesar do GoLang voltado para o front-end não ser uma escolha comum, ele pode ser usado em ferramentas que auxiliam o processo de desenvolvimento front-end, como é o caso de minificadores de códigos ou transpiladores.
Em quais cenários o GoLang pode ser utilizado?
Diferente do que você possa estar pensando, o GoLang pode ser utilizado para além de serviços da web, como também:
- Aplicações Web e APIs (como já dito)
- Aplicações Desktop (Windows, Linux e MacOS)
- CLI (Command Line Interface)
- Big Data e Machine Learning
GoLang é Orientado a Objetos?

E a resposta é.... não!
De acordo com Robert Griesemer em uma entrevista: "Programas complexos que adotam a orientação a objetos, são equivalentes a versão do Spaghetti Code", fazendo referencia ao famoso GoTo de 1970.
Isso significa que o Robert em diversas entrevistas e discursões sobre a criação da linguagem GoLang, expressou preocupações com a complexidade que pode surgir no design de software quando se adota uma abordagem puramente orientada a objetos.
E por esse motivo que a linguagem não é puramente orientada a objetos, mas oferece alguns dos conceitos da programação orientada a objetos (como encapsulamento, polimorfismo e composição), tudo isso feito de maneira mais simples, e sem a complexidade associada a herança e classes.
Mas pode ficar tranquilo, que tais funcionalidades da linguagem serão discutidos durante as lições futurasl, ok? 😍
Go ou não Go? Vale a pena criar aplicações com GoLang?

Desde o seu lançamento, essa linguagem vem sendo amplamente utilizada, por diversas empresas ao redor do mundo, como: Google, Uber, DropBox e até mesmo a Netflix!
Com relação ao seu desempenho, sabemos que ela é muito próxima de linguagens como C
e C++
, adicionando uma camada de segurança extra e simplicidade. E isso quer dizer que você não vai ficar na mão quando precisar criar uma aplicação extremamente rápida, pois o GoLang vai dar conta do recado 😉
Junto a isso, apesar de ser uma linguagem nova, sua comunidade de desenvolvedores cresce a cada dia mais, contando com um suporte atualizado de bibliotecas quase que diariamente.
Conclusão
Portanto, podemos dizer que o GoLang é uma linguagem moderna, focada em ser simplista e minimalista, ao mesmo tempo que oferece um desempenho similar a linguagens de baixo nível como C
e C++
.
Agora chega de história e vamos direto ao que interessa! 😆
Na próxima lição, iremos aprender a configurar nosso ambiente de desenvolvimento para trabalhar com GoLang, independente do sistema operacional que você estiver utilizando (Windows, Linux e Mac).
Te espero na próxima lição 😀