12 de jun. de 2023·6 min de leitura

Os princípios básicos do Go

Obtenha uma compreensão abrangente dos fundamentos da linguagem de programação Go. Aprenda dicas e práticas recomendadas para iniciantes e desenvolvedores para dar o pontapé inicial em sua jornada com Go.

Os princípios básicos do Go

Introdução à linguagem Go

Go, também conhecida como Golang, é uma linguagem de programação de código aberto desenvolvida pelos engenheiros da Google Robert Griesemer, Rob Pike, e Ken Thompson. Foi concebida para ser simples, eficiente e fiável. A linguagem Go é ideal para o desenvolvimento de aplicações modernas, particularmente nos domínios dos sistemas de infra-estruturas do lado do servidor e do backend. Com a sua sintaxe simples, suporte integrado para concorrência e excelente desempenho, o Go tornou-se uma escolha popular entre os programadores para a criação de aplicações Web, microsserviços e sistemas distribuídos.

O ecossistema de Go cresceu rapidamente desde o seu lançamento em 2009, oferecendo uma vasta gama de bibliotecas e ferramentas para os programadores aproveitarem. Empresas como Dropbox, Uber e Docker escolheram Go para seus sistemas de back-end subjacentes, destacando ainda mais sua importância e relevância no ambiente tecnológico atual.

Este artigo tem como objetivo fornecer a você uma base sólida em Go e sua sintaxe, concentrando-se nos principais recursos da linguagem para iniciar sua jornada com a programação em Go.

Instalando e configurando o Go

Antes de começar a trabalhar com o Go, você precisará instalar a linguagem no seu computador. Siga estes passos para começar:

  1. Visite o site oficial do Go e faça o download do arquivo de instalação apropriado para seu sistema operacional.

  2. Abra o arquivo baixado e siga as instruções de instalação fornecidas pelo instalador.

  3. Defina a variável de ambiente PATH para incluir o diretório de instalação do Go. Isso garantirá que os comandos Go estejam disponíveis a partir da linha de comando. Nos sistemas Unix, normalmente é possível adicionar a seguinte linha ao seu arquivo .bashrc ou .profile:

    export PATH=$PATH:/usr/local/go/bin

  4. Reinicie seu terminal ou prompt de comando para aplicar as alterações.

  5. Confirme que o Go está instalado corretamente executando o seguinte comando no seu terminal:

    go version

    Se a instalação foi bem-sucedida, a versão do Go instalada no seu computador será exibida na saída.

Agora que o Go está instalado no seu computador, é hora de mergulhar nos conceitos básicos da linguagem.

Entendendo a sintaxe e os tipos de dados da Go

A sintaxe do Go foi projetada para ser simples e fácil de ler. Aqui, cobriremos alguns elementos essenciais da linguagem, incluindo pacotes, importações, variáveis e tipos de dados básicos.

Pacotes e importações

Os programas em Go são organizados em pacotes, que ajudam a modularizar e gerenciar o código. Um pacote é essencialmente um diretório que contém um ou mais arquivos-fonte Go. A primeira linha de cada arquivo Go deve declarar o pacote ao qual ele pertence:

package main

No exemplo acima, o arquivo fonte pertence ao pacote "main". O bloco de código após a declaração do pacote normalmente consiste em instruções de importação que incluem outros pacotes necessários para o seu programa:

import ( "fmt" "math" )

A instrução de importação especifica os pacotes a serem importados para o ficheiro actual, permitindo-lhe aceder às suas características exportadas, tais como funções e variáveis.

Variáveis e constantes

As variáveis em Go podem ser declaradas usando a palavra-chave var, seguida pelo nome da variável, tipo e valor inicial opcional:

var x int = 10

Se o valor inicial for fornecido, Go pode inferir o tipo, permitindo que você omita a declaração do tipo:

var x = 10 // x é um int

Você também pode usar a sintaxe de declaração de variável curta do Go, que automaticamente infere o tipo e atribui um valor inicial:

x := 10 // x é um int

As constantes podem ser declaradas usando a palavra-chave const. Seus valores devem ser conhecidos em tempo de compilação e não podem ser alterados durante a execução do programa:

const PI = 3.14159

Tipos de dados básicos

Go tem vários tipos de dados fundamentais, incluindo:

  • Inteiros: Os números inteiros com sinal podem ser declarados usando int, int8, int16, int32 ou int64. Os números inteiros sem sinal podem ser definidos com uint, uint8, uint16, uint32 ou uint64.
  • Números de ponto flutuante: Estes podem ser definidos com float32 ou float64.
  • Números complexos: Os números complexos são declarados usando complex64 ou complex128.
  • Booleanos: Os booleanos são representados pelo tipo de dados bool e podem ter o valor true ou false.
  • Cadeias de caracteres: As strings em Go são seqüências de caracteres codificados em UTF-8. Elas são imutáveis e seu comprimento é determinado em tempo de execução.

Além disso, Go suporta tipos de dados compostos, tais como:

  • Arrays: Seqüências de comprimento fixo de elementos do mesmo tipo.
  • Fatias: Sequências de comprimento dinâmico de elementos do mesmo tipo.
  • Mapas: Coleções não ordenadas de pares chave-valor, onde as chaves e os valores podem ter qualquer tipo especificado.

Ao continuar aprendendo Go, você será capaz de combinar esses tipos e estruturas de dados básicos para construir aplicações mais complexas e versáteis.

Funções e métodos em Go

As funções são um dos blocos de construção essenciais de qualquer linguagem de programação, e a linguagem Go não é exceção. As funções em Go são definidas usando a palavra-chave func, seguida pelo nome da função, parâmetros de entrada, tipo de retorno e o corpo da função. As funções em Go podem retornar vários valores, facilitando o manuseio de operações complexas e a verificação de erros.

Aqui está um exemplo de uma função simples em Go:

package main import ( "fmt" ) func add(a int, b int) int { return a + b } func main() { result1 := add(5, 7) fmt.Println("A soma é:", result1) }

Neste exemplo, definimos uma função simples de adição que recebe dois parâmetros inteiros e devolve a sua soma. A função é então chamada a partir da função principal e o resultado é impresso.

Métodos em Go

Os métodos em Go são semelhantes às funções, mas estão associados a um tipo de receptor específico e são chamados em uma instância do tipo receptor. Isso torna possível adicionar comportamento aos tipos existentes, semelhante à forma como as linguagens de programação orientadas a objetos definem métodos nas classes. Aqui está um exemplo:

package main import ( "fmt" ) type Circle struct { radius float64 } func (c Circle) area() float64 { return 3.14159 * c.radius * c.radius } func main() { myCircle := Circle{radius: 5} circleArea := myCircle.area() fmt.Printf("A área do círculo é: %.2f\n", circleArea) }

Neste exemplo, definimos uma estrutura Circle com um campo de raio. Um método chamado area é então definido para o tipo Circle. Esse método calcula a área do círculo usando o raio e retorna o resultado como um valor float64.

Estruturas de controle em Go

Crie um painel interno
Crie ferramentas internas e painéis de administração que se conectam perfeitamente ao seu backend.
Criar ferramenta

As estruturas de controlo são a base de qualquer linguagem de programação, uma vez que ditam o fluxo do programa. A linguagem Go oferece várias estruturas de controle para ramificação condicional, looping e verificações de condições múltiplas ou operações de comunicação.

Declarações If

Em Go, a ramificação condicional é tipicamente feita usando instruções if. Essas instruções avaliam uma expressão booleana e, se forem verdadeiras, executam o bloco de código que segue a expressão. Aqui está um exemplo:

package main import ( "fmt" ) func main() { number := 42 if number%2 == 0 { fmt.Println("O número é par.") } else { fmt.Println("O número é ímpar.") } }

Neste exemplo, verificamos se um número é par ou ímpar utilizando o operador de módulo e uma instrução if.

Para laços

O Go tem apenas um tipo de loop: o loop for. Ele pode ser usado para todos os tipos de cenários de looping: iterações fixas, loops infinitos e loops "while". Aqui está um exemplo:

package main import ( "fmt" ) func main() { for i := 1; i <= 5; i++ { fmt.Println("Iteração:", i) } }

Neste exemplo, usamos um loop for com um contador para iterar cinco vezes e imprimir o número da iteração atual.

Instruções Switch e Select

O Go fornece a instrução switch para verificações de condições múltiplas e a instrução select para operações de comunicação. Aqui está um exemplo de uma instrução switch:

package main import ( "fmt" ) func main() { nota := "B" switch nota { case "A": fmt.Println("Excelente!") case "B": fmt.Println("Bom") case "C": fmt.Println("Razoável") case "D": fmt.Println("Ruim") default: fmt.Println("Nota inválida") } }

Neste exemplo, usamos uma instrução switch para verificar a nota de entrada e imprimir a observação de desempenho correspondente. Ao contrário de outras linguagens, a linguagem Go não exige uma instrução break no final de cada bloco de casos, pois ela sai da instrução switch após executar um caso correspondente.

Concorrência em Go

Transforme o básico de Go em um app
Crie um backend em Go visualmente e gere código-fonte pronto para produção.
Experimente AppMaster

Um dos recursos mais poderosos da linguagem Go é seu suporte integrado para concorrência usando Goroutines e Channels. A simultaneidade permite que vários threads de execução sejam executados simultaneamente, permitindo maior desempenho e capacidade de resposta em aplicativos.

Rotinas

Goroutines são execuções de funções leves e simultâneas em Go. Para criar uma Goroutine, basta anexar a palavra-chave go a uma chamada de função. A função começa a ser executada simultaneamente com o resto do programa, compartilhando o mesmo espaço de endereço. Aqui está um exemplo:

package main import ( "fmt" "time" ) func display(message string) { for i := 0; i < 5; i++ { fmt.Println(message) time.Sleep(1 * time.Second) } } func main() { go display("Hello") go display("World") // Deixa as Goroutines terminarem antes de sair time.Sleep(5 * time.Second) }

Neste exemplo, criamos duas Goroutines que exibem mensagens e fazem uma pausa de um segundo antes de repetir. A função principal espera por cinco segundos para garantir que as Goroutines terminem antes de sair do programa.

Canais

Os canais são o meio de comunicação entre as goroutines. Permitem que as Goroutines enviem e recebam valores de uma forma thread-safe. Aqui está um exemplo:

package main import ( "fmt" ) func producer(numbers chan<- int) { for i := 1; i <= 5; i++ { fmt.Println("Produzido:", i) numbers <- i } close(numbers) // Fecha o canal quando terminado } func consumer(numbers <-chan int) { for number := range numbers { fmt.Println("Consumido:", number) } } func main() { numbers := make(chan int) go producer(numbers) go consumer(numbers) // Deixa as Goroutines terminarem time.Sleep(1 * time.Second) }

Neste exemplo, criamos uma Goroutine produtora que gera números e os envia para um canal, e uma Goroutine consumidora que processa os números recebidos do canal. Ao usar canais, garantimos a comunicação segura entre as Goroutines.

A simultaneidade em Go, usando Goroutines e Channels, simplifica o desenvolvimento de aplicativos simultâneos, tornando-os mais eficientes, confiáveis e fáceis de entender.

Melhores práticas para escrever código em Go

Escrever um código Go limpo, de fácil manutenção e eficiente é essencial para desenvolver aplicações poderosas e garantir o sucesso a longo prazo. Aqui estão algumas práticas recomendadas que você deve seguir ao trabalhar com Go:

Convenções de nomenclatura adequadas

As convenções de nomenclatura desempenham um papel crucial para tornar seu código Go compreensível e de fácil manutenção. Siga estas diretrizes para nomear em Go:

  • Os nomes de pacotes devem ser minúsculos, curtos e concisos. Evite usar sublinhados ou nomes com letras maiúsculas e minúsculas.
  • Os nomes de variáveis, funções e métodos devem estar em camelCase, com a primeira letra de cada palavra em maiúscula, exceto a primeira palavra.
  • Identificadores exportados, tais como funções, métodos e variáveis que podem ser acedidos a partir de outros pacotes, devem começar com uma letra maiúscula.
  • Identificadores não exportados, que são restritos ao pacote onde são definidos, devem começar com uma letra minúscula.

Formatação correcta

Aderir a um formato consistente em todo o seu código Go torna-o muito mais fácil de ler e entender. A comunidade Go desenvolveu uma ferramenta chamada gofmt que formata automaticamente seu código de acordo com as diretrizes recomendadas. Use esta ferramenta para garantir que seu código adira a um estilo consistente.

Escreva funções curtas e focadas

Certifique-se de que suas funções e métodos são curtos e focados em um único propósito. Isto melhora a legibilidade, a manutenção e simplifica os testes. Em vez de escrever uma única função com muitas responsabilidades diferentes, divida-a em funções mais pequenas e mais específicas. Esta abordagem também ajuda a reutilizar o código em diferentes partes da sua aplicação.

Tratamento rigoroso de erros

O tratamento de erros é um aspecto central da programação em Go. A linguagem Go encoraja-o a tratar os erros explicitamente, em vez de confiar nas excepções. Quando uma função retorna um erro, sempre verifique e trate-o adequadamente. Faça uso do padrão idiomático if err != nil para garantir que seu programa se comporte corretamente na presença de erros. Além disso, forneça contexto em suas mensagens de erro para ajudar você e outros desenvolvedores a identificar e diagnosticar problemas mais facilmente.

Escreva testes unitários abrangentes

Escrever testes unitários é essencial para garantir a correção e a confiabilidade do seu código Go. O Go tem suporte integrado para testes através de seu pacote testing. Escreva testes para funções, métodos e pacotes individuais para validar seu comportamento e detectar possíveis problemas à medida que faz alterações em seu código. Invista tempo em escrever testes completos e de fácil manutenção para evitar bugs e aumentar a confiança no seu código.

Usar pacotes e bibliotecas Go com sabedoria

O Go tem um ecossistema forte com muitas bibliotecas e pacotes, tanto na biblioteca padrão quanto na comunidade mais ampla. Embora o uso de bibliotecas possa economizar tempo, seja cauteloso ao escolher dependências externas. Sempre opte por bibliotecas respeitáveis e bem documentadas e avalie várias opções antes de tomar uma decisão. Além disso, mantenha sua lista de dependências gerenciável e monitorada quanto a possíveis problemas de segurança e desempenho.

Documentar o seu código

Escreva comentários claros e concisos e documente seu código usando as convenções de documentação do Go. Documentar seu código com comentários, explicações e exemplos adequados é crucial para a manutenção a longo prazo e para o trabalho em equipe.

Casos de uso populares e bibliotecas para Go

Do desenvolvimento à implantação
Faça deploy na AppMaster Cloud ou na sua própria infraestrutura AWS, Azure ou Google Cloud.
Implantar app

A Go é uma linguagem de programação versátil com inúmeros casos de uso. Algumas das áreas de aplicação mais populares para Go incluem:

  • Programação do lado do servidor e serviços da Web
  • Redes e sistemas distribuídos
  • Arquitetura de microsserviços
  • DevOps e ferramentas CLI

Aqui está uma lista de algumas bibliotecas e frameworks populares no ecossistema Go que atendem às necessidades comuns de desenvolvimento:

Frameworks e bibliotecas Web

  • Gin: Uma estrutura Web rápida, simples e leve com uma API do tipo martini.
  • Echo: Um framework web de alto desempenho, extensível e minimalista para Go.
  • Revel: Um framework web full-stack que não requer configuração ou código boilerplate para começar.

Ferramentas de API e protocolo

  • gRPC: Uma estrutura RPC universal de alto desempenho e de código aberto.
  • Gorilla Mux: Um poderoso roteador de URL e biblioteca de despachante para construir aplicações web e APIs em Go.

Drivers e ajudantes de banco de dados

  • GORM: Uma fantástica biblioteca ORM para Go que suporta vários sistemas de banco de dados, como PostgreSQL, MySQL, SQLite e muito mais.
  • sqlx: Uma extensão do pacote padrão database/sql que simplifica e melhora as operações de banco de dados, mantendo a compatibilidade com o pacote padrão.

Para além destas bibliotecas, a biblioteca padrão Go oferece muitos pacotes úteis para trabalhar com uma vasta gama de funcionalidades, tais como redes, E/S, estruturas de dados, algoritmos e muito mais.

Vale a pena notar que aprender a linguagem de programação Go e usar bibliotecas/APIs populares é apenas um aspecto da construção de um aplicativo bem-sucedido. Para acelerar verdadeiramente o seu processo de desenvolvimento e eliminar a dívida técnica, pode considerar experimentar o AppMaster- uma plataforma sem código que lhe permite criar aplicações backend, Web e móveis utilizando uma interface visual enquanto gera automaticamente código-fonte sem dívida técnica. Com a plataforma AppMaster, as suas aplicações Go podem ser desenvolvidas até 10 vezes mais rapidamente e 3 vezes mais rentáveis, abrangendo uma vasta gama de funcionalidades e casos de utilização.

FAQ

O que é o Go?

Go, também conhecida como Golang, é uma linguagem de programação de código aberto criada na Google em 2007. Foi concebida para ser eficiente, simples e escalável.

O que torna a linguagem Go diferente das outras linguagens de programação?

Go combina o desempenho de uma linguagem compilada com a simplicidade e legibilidade de uma linguagem de script. Tem suporte incorporado para concorrência, recolha de lixo e um forte enfoque na simplicidade e clareza.

Quais são as principais características do Go?

A linguagem Go inclui características como tipagem estática, gestão automática da memória (recolha de lixo), suporte integrado para programação concorrente (goroutines e canais), uma sintaxe simples e expressiva e uma biblioteca padrão rica.

Como é que a linguagem Go lida com a concorrência?

Go tem suporte integrado para concorrência através de goroutines e canais. As goroutines são threads leves que permitem que você escreva código concorrente facilmente. Os canais são usados para comunicação e sincronização entre goroutines.

O Go tem um sistema de gestão de pacotes?

Sim, Go tem um sistema de gerenciamento de pacotes embutido chamado "go modules". Permite-lhe gerir dependências e importar facilmente pacotes externos para os seus projectos.

O Go é adequado para aplicações em grande escala?

Sem dúvida! A simplicidade do Go e o suporte integrado para concorrência fazem dele uma óptima escolha para o desenvolvimento de aplicações de grande escala. Muitas empresas, incluindo a Google, utilizam Go para criar sistemas escaláveis e de elevado desempenho.

O que é uma plataforma sem código e qual a sua relação com Go?

Uma plataforma sem código permite aos utilizadores criar aplicações de software sem escrever código tradicional. Estas plataformas fornecem uma interface visual e componentes pré-construídos que os utilizadores podem configurar para criar aplicações de forma rápida e fácil. Embora a linguagem Go não seja uma no-code linguagem em si, pode ser integrada com plataformas no-code como AppMaster.io. AppMaster.io é uma plataforma no-code específica que permite aos utilizadores criar aplicações personalizadas utilizando uma interface visual, sem necessidade de conhecimentos de programação. Fornece a funcionalidade drag-and-drop, modelos pré-construídos e opções de integração com várias fontes de dados e APIs.

O Go é adequado para o desenvolvimento Web?

Sim, Go tem um conjunto de bibliotecas e frameworks que o tornam adequado para o desenvolvimento web. A estrutura mais popular para desenvolvimento web em Go chama-se "Gin", mas existem várias outras como Echo, Revel e Beego.

Fácil de começar
Criar algo espantoso

Experimente o AppMaster com plano gratuito.
Quando estiver pronto, você poderá escolher a assinatura adequada.

Comece