Guias Go

Guia da linguagem Go

Nesse guia de Go você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação Go. Acesse agora mesmo!

há 10 meses 4 dias


Você sabia que a TreinaWeb é a mais completa escola para desenvolvedores do mercado?

O que você encontrará aqui na TreinaWeb?

Conheça os nossos cursos

Go ou Golang como é comumente conhecida pela comunidade, é uma linguagem de programação desenvolvida pela Google em setembro de 2007, mas que só veio a público em novembro de 2009.

Grandes nomes da área da computação fizeram parte do desenvolvimento dessa linguagem, sendo eles, Robert Griesemer, Ken Thompson e Rob Pike. A linguagem Go foi desenvolvida visando solucionar os desafios de engenharia enfrentados pelos desenvolvedores e desenvolvedoras do Google ao utilizar a linguagem C.

Go tem como suas principais características:

  • É uma linguagem compilada;
  • Estaticamente e fortemente tipada, além de possuir o recurso de inferência de tipos ou duck typing;
  • Possui um garbage collector integrado, prevenindo problemas de vazamento de memória e um gerenciamento de memória apropriado;
  • É uma linguagem opinativa, ela segue um sistema de tipos delimitado e lança erros quando variáveis ou bibliotecas não utilizadas são declaradas no programa;
  • É simples de compilar e empacotar, gerando binários que podem ser executados diretamente pelo sistema operacional sem a necessidade de instalar nenhum interpretador previamente;
  • Extensa biblioteca padrão com ferramentas para comunicação HTTP, serialização e desserialização de dados, expressões regulares e muito mais.

Para mais detalhes sobre a linguagem Go, recomendo a leitura do artigo “O que é e como começar com Go (Golang)?

Lógica de Programação - Iniciando na programação
Curso Lógica de Programação - Iniciando na programação
Conhecer o curso

Como instalar a linguagem e nosso primeiro exemplo

Como a Golang é multiplataforma, você pode instalar em qualquer sistema: Windows, Linux e MacOS. Já temos um artigo que aborda todo o passo a passo de instalação, em todos esses sistemas, para que você já deixe sua máquina pronta para começar.

Como qualquer outra linguagem, a Golang tem as suas próprias regras de sintaxe e estrutura. Vamos imprimir o tradicional “Hello World” e você verá como é fácil!

package main

import "fmt"

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

No mesmo artigo onde ensinamos você a instalar a linguagem Go em sua máquina, também abordamos com mais profundidade sua sintaxe e estrutura.

Conhecendo variáveis e constantes

O Go é uma linguagem de tipagem estática, ou seja, existe um sistema de tipos bem definido validado durante o tempo de compilação do código. Além disso, o Go também é uma linguagem fortemente tipada, isso significa que o Go não irá realizar conversão automática de tipos, caso alguma conversão seja necessária ela deve ser feita de forma explícita pela pessoa que está desenvolvendo o software.

Por padrão, o Go possui em sua biblioteca padrão diversos tipos de dados, abaixo estão listados os mais comuns de serem utilizados:

  • int: é um tipo inteiro que pode conter 32 ou 64 bits, a definição de qual o tamanho em memória será utilizado vai depender da arquitetura da máquina em que o código está sendo executado;
  • uint: tem o mesmo comportamento do tipo int, mas só recebe valores sem sinal;
  • float32: trata-se de um tipo de dado de ponto flutuante de 32 bits. Isso quer dizer que ele permite armazenar valores decimais entre 6 e 7 casas. Porém, o armazenamento em memória pode não representar necessariamente o valor repassado. Por exemplo, um float32 definido com “0,001” pode acabar sendo armazenado como “0,00100001”, e isso não somente no Go, já que isso é decorrência dos pontos flutuantes, em geral. Por isso, o tipo float32 não deve ser usado para operações que precisam passar por várias operações aritméticas, como sistemas financeiros. Isso porque, a primeira vista, essa imprecisão pode não impactar, mas na sequência de operações realizadas, estas imprecisões podem começar a aparecer nos resultados;
  • float64: representa um ponto flutuante de 64 bits. Por isso, ele permite armazenar números de até cerca de 15 casas decimais. A observação para o tipo float32 também é válida para o tipo float64, por ser um tipo de dado que é armazenado por aproximação de valores, ele não deve ser utilizado em operações que demandam precisão absoluta;
  • bool: é um dos tipos de dados mais simples, pois ele pode armazenar apenas dois valores: true (verdadeiro) ou false (falso). É empregado para realizar testes lógicos, dentro de estruturas de decisão e repetição, por exemplo;
  • string: trata-se de um conjunto de caracteres de tamanho indefinido.

Após vermos os tipos de dados, podemos criar nossas variáveis. Elas têm algumas regras, como, por exemplo, devem ser claras e autoexplicativas.

package main

func main() {
	var idade int = 18
	var nome string = "Cleyson"
}

Também é possível declarar constantes na linguagem Go, diferente de uma variável as constantes não podem ter o seu valor alterado ao longo da execução do programa.

A declaração de uma constante é bem semelhante à forma de declaração de uma variável, a diferença é que utilizamos a palavra reservada const e as constantes devem ser imediatamente inicializadas.

package main

func main() {
	const segundosEmUmMinuto int = 60
}

No artigo sobre variáveis e constantes no Go, podemos nos aprofundar no uso de constantes e ver mais exemplos e explicações sobre o uso de variáveis.

Lógica de Programação - Avançando na programação
Curso Lógica de Programação - Avançando na programação
Conhecer o curso

Estruturas condicionais e estruturas de repetição

As estruturas condicionais e de repetição são fundamentais e vem para nos ajudar no reaproveitamento de código.

As estruturas condicionais possibilitam ao programa tomar decisões e alterar o seu fluxo de execução. Isso possibilita ao desenvolvedor o poder de controlar quais são as tarefas e trechos de código executados de acordo com diferentes situações, como os valores de variáveis. Algumas estruturas condicionais no Go são o if/else e o switch/case.

Abaixo temos um exemplo simples da utilização do if/else. Nele verificamos se a pessoa é maior ou menor de idade, dependendo do valor que contiver na variável idade.

package main

import "fmt"

func main() {
	idade := 18
	if idade >= 18 {
		// Se a váriavel idade for maior ou igual à 18 esse trecho de código será executado
		fmt.Println("Você é maior de idade!")
	} else {
		// Se a váriavel idade não for maior ou igual à 18 esse trecho de código será executado
		fmt.Println("Você é menor de idade!")
	}
}

As estruturas de repetição, também conhecidas como loops (laços), são utilizadas para executar repetidamente uma instrução ou bloco de instrução enquanto determinada condição estiver sendo satisfeita. O Go possui apenas uma estrutura de repetição, a estrutura for, porém, ela pode ser usada de diversas formas.

Vejamos um exemplo abaixo utilizando o for. Aqui teremos uma variável começando em zero, onde, a cada rodada, ela irá somar +1. Isso irá se repetir até que a variável chegue até 10, encerrando assim esse bloco.

package main

import "fmt"

func main() {
	for i := 1; i <= 10; i++ {
		fmt.Println("A váriavel i agora é:", i)
	}
}

Confira a execução desse código acima e outros exemplos com muitos mais detalhes em nosso artigo sobre estruturas de decisão e repetição no Go.

Orientação a objetos

O Go possui suporte para a orientação a objetos? No FAQ (Frequently Asked Questions) da documentação da linguagem, existe um tópico dedicado a essa questão. Lá é dito que a Golang possui um suporte limitado a orientação a objetos, ou seja, a linguagem possui suporte a orientação a objetos, porém, não da mesma maneira que estamos acostumados em outras linguagens.

Quando falamos de orientação a objetos na linguagem Go, nós não temos o conceito de classes como estamos acostumados, o que existe no Go são as structs. Essas structs são tipos de dados compostos que permitem agrupar diferentes tipos de valores relacionados em um único objeto. Uma struct em Go é definida usando a palavra-chave type seguida pelo nome da struct e uma lista de campos, que consistem em um nome e um tipo. Por exemplo:

type Pessoa struct {
    Nome  string
    Idade int
    Email string
}

Uma vez que uma struct é definida, podemos criar variáveis desse tipo, preenchê-las com valores e acessar os campos usando a notação de ponto. Por exemplo:

func main() {
    pessoa := Pessoa{
        Nome:  "João",
        Idade: 25,
        Email: "joao@example.com",
    }

    fmt.Println("Nome:", pessoa.Nome)
    fmt.Println("Idade:", pessoa.Idade)
    fmt.Println("Email:", pessoa.Email)
}

Para ver mais exemplos e conceitos bem mais aprofundados, acesse o artigo Orientação a objetos na linguagem Go.

Lógica Orientada a Objetos - Primeiros Passos
Curso Lógica Orientada a Objetos - Primeiros Passos
Conhecer o curso

Gerenciamento de dependências no Go

Um gerenciador de dependências é uma ferramenta que ajuda a gerenciar as bibliotecas e pacotes que um projeto precisa para funcionar corretamente. Ele permite que as dependências sejam facilmente instaladas, atualizadas e removidas, sem a necessidade de gerenciá-las manualmente.

Isso pode economizar muito tempo e evitar erros de compatibilidade entre diferentes versões de bibliotecas. Em Go, o gerenciador de dependências padrão é o Go Modules (Módulos Go), que é uma ferramenta integrada ao Go e facilita muito o processo de gerenciamento de dependências.

Primeiramente, para podermos realizar as ferramentas de gerenciamentos de dependências em projetos Go, precisamos inicializar um módulo em nosso projeto. Para isso executamos o seguinte comando:

go mod init nome-do-modulo

Então caso queiramos criar um módulo chamado github.com/treinaweb/meu-projeto-go, executaremos o seguinte comando:

go mod init github.com/treinaweb/meu-projeto-go

Para encontrar um pacote para usar em um projeto Go, podemos pesquisar em repositórios públicos como o GitHub ou o pkg.go.dev. O pkg.go.dev é uma ferramenta específica para a documentação de pacotes e bibliotecas em Go, e pode ser uma fonte útil para encontrar pacotes relacionados a uma funcionalidade específica.

Uma vez que tenhamos encontrado um pacote que vamos utilizar, basta executar o seguinte comando:

go get nome-do-pacote

Então, se vamos instalar o pacote github.com/google/uuid, por exemplo, precisaremos executar o comando:

go get github.com/google/uuid

Para mais detalhes sobre o gerenciamento de dependências em projetos Go recomendo a leitura do artigo Gerenciamento de dependências no Go.

Lógica Orientada a Objetos - Avançando na Orientação a Objetos
Curso Lógica Orientada a Objetos - Avançando na Orientação a Objetos
Conhecer o curso

Conclusão

Em suma, a linguagem Go é uma opção poderosa e eficiente para desenvolvedores que buscam uma linguagem de programação moderna e escalável. Com suas características distintas, biblioteca padrão abrangente e gerenciador de dependências integrado, o Go oferece uma experiência de desenvolvimento agradável e produtiva. Se você está começando a explorar o Go ou já é um desenvolvedor experiente, essa linguagem certamente merece sua atenção.

Por fim, caso queira aprender mais sobre a Golang e sua infinidade de recursos saiba que aqui na TreinaWeb temos o curso Go Básico que possui 05h30 de vídeo e um total de 37 exercícios.

Veja quais são os tópicos abordados durante o curso Go Básico:

  • Compreender a sintaxe básica da Golang;
  • Compreender conceitos básicos envolvidos na Go, como ponteiros de memória;
  • Utilizar as estruturas básicas da linguagem, como declaração de variáveis;
  • Utilizar as principais estruturas de conjuntos da Go, como arrays, slices e maps;
  • Entender as principais funções na Golang que são built-in, como make(), new(), panic(), recover() e defer;
  • Organizar o código em pacotes e utilizar os principais pacotes disponibilizados pela linguagem;
  • Entender como podemos utilizar concorrência com a Golang, inclusive com técnicas como os channels;
  • Entender o que são as structs na Go e como podemos utilizar um pouco de orientação a objetos com a linguagem;
  • Realizar operações de I/O no sistema operacional, como a criação e escrita de arquivos.

Autor(a) do artigo

Cleyson Lima
Cleyson Lima

Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python.

Todos os artigos

Artigos relacionados Ver todos