Como implantar um aplicativo Golang

How to Deploy a Golang App

Go (Golang) é uma linguagem de programação desenvolvida pelo Google em 2009 para resolver problemas comuns no desenvolvimento de sistemas em grande escala, como compilação lenta e necessidade de programação simultânea.

A linguagem foi projetada para ser simples, eficiente e fácil de usar, com uma sintaxe semelhante à do C. Além disso, a Go é compilada, o que a torna mais rápida do que as linguagens interpretadas.

Um dos principais recursos do Go é o suporte à simultaneidade, que permite executar várias tarefas simultaneamente por meio de threads leves chamados Goroutines.

A linguagem Go também é conhecida por seu forte suporte ao desenvolvimento de redes e da Web. A biblioteca padrão do Go contém pacotes para HTTP, TCP/IP e outros protocolos de rede, o que facilita a criação de aplicativos em rede.

Neste artigo, você explorará os benefícios, as limitações e as opções de implantação de aplicativos Go. Além disso, você criará, colocará no docker e implantará um aplicativo Go usando o serviço de conteinerização do Back4app gratuitamente.

Continue lendo para descobrir como implantar um aplicativo Go.

Vantagens da Golang no desenvolvimento web

A crescente popularidade da linguagem Go não é aleatória. Há muitas vantagens que podem ser obtidas e aproveitadas com o uso da linguagem Go em seus aplicativos.

Alto desempenho

O alto desempenho é um dos principais motivos pelos quais empresas como Dropbox e Uber usam Go. A linguagem Go foi projetada para tempos de execução rápidos, o que a torna a escolha ideal para aplicativos que exigem alto desempenho.

A linguagem Go emprega um coletor de lixo que reduz a sobrecarga de gerenciamento de memória, permitindo tempos de execução mais rápidos. Além disso, você pode usar o suporte integrado à concorrência da Go para aumentar o desempenho do seu aplicativo.

Escalabilidade

A linguagem Go é uma excelente opção para a criação de aplicativos escaláveis. Com a simultaneidade, você pode criar programas capazes de lidar com muitas tarefas, o que torna a linguagem Go adequada para aplicativos que lidam com cargas de alto tráfego e que precisam ser ampliados rapidamente.

O Go também oferece excelente suporte a sistemas distribuídos, o que o torna a opção ideal para a criação de aplicativos de grande escala que precisam ser executados em várias máquinas.

Go é testado em batalha

Muitas empresas populares usam Go para criar aplicativos de grande escala, incluindo os usados pelo Google, Uber e Dropbox. Isso significa que a linguagem Go foi testada em batalha para ser confiável e estável na criação de aplicativos complexos para grandes bases de usuários.

O Go se concentra fortemente na compatibilidade com versões anteriores, e os aplicativos escritos em Golang continuarão a funcionar mesmo com a evolução da linguagem.

Grande apoio da comunidade

Desde que foi lançada, a linguagem Go tem sido uma das que mais crescem em termos de adoção, criando, assim, uma comunidade grande e ativa. O fato de Go ter uma grande comunidade ativa significa que você pode encontrar facilmente recursos e respostas a perguntas.

O Go é o lar de muitas bibliotecas e ferramentas de código aberto que você pode usar para acelerar o tempo de desenvolvimento. Ferramentas de compilação populares, como Kubernetes, Docker e Hugo, usam pacotes como o Cobra em suas ferramentas CLI.

Limitações da Golang

Embora a Golang seja uma linguagem de programação escalável e de alto desempenho, a Go tem suas limitações que você deve considerar antes de desenvolver com a linguagem.

Maior complexidade para determinadas tarefas

A linguagem Go pode ser fácil de aprender e ler, mas tarefas específicas são mais fáceis em outras linguagens do que em Go. A criação de uma interface de usuário interativa com a linguagem Go pode ser desafiadora porque a linguagem Go precisa de um kit de ferramentas GUI integrado, e os pacotes de terceiros trazem complexidade ao seu projeto.

O modelo de simultaneidade do Go pode ser desafiador para iniciantes

O modelo de simultaneidade da linguagem Go pode ser um desafio para os iniciantes entenderem e usarem de forma eficaz. A linguagem Go usa goroutines e canais para a concorrência, que são ferramentas poderosas, mas que podem ser difíceis de entender. Você deve aprender a usar os canais de forma eficaz para evitar deadlocks ou condições de corrida.

O modelo de simultaneidade do Go também exige que você pense de forma diferente sobre a estrutura e o design do código. Isso será difícil se você estiver acostumado a modelos de programação sequencial.

Ecossistema de bibliotecas menos maduro em comparação com outros idiomas

Embora a biblioteca padrão da Golang seja abrangente e tenha a maioria das funcionalidades de que você precisa para criar aplicativos em Go, ela é menos madura do que as bibliotecas de linguagens como Java ou Python.

A Golang é uma linguagem de programação relativamente nova; algumas bibliotecas populares ainda não estão disponíveis. Isso pode ser uma limitação para projetos específicos, especialmente aqueles que exigem funcionalidade mais especializada.

Além disso, as bibliotecas de terceiros para a Golang são menos difundidas do que as disponíveis para outras linguagens, e talvez você precise implementar algumas funcionalidades por conta própria, o que pode consumir muito tempo.

Opções de implantação do Golang

Depois de criar aplicativos em Go, você tem várias opções de implantação, cada uma com vantagens e desvantagens.

Você tem uma ampla gama de opções de serviços de IaaS, como AWS, serviços de PaaS, como Heroku, serviços de BaaS, como Back4app e Google Firebase, e serviços de CaaS, como Back4App Containers.

Infraestrutura como serviço (IaaS), como o AWS

Os provedores de infraestrutura como serviço (IaaS), como a Amazon Web Services (AWS), oferecem funcionalidade para implementar e gerenciar máquinas virtuais próprias na nuvem.

Com o AWS, você pode usar serviços como o Elastic Compute Cloud (EC2) para implantar seu aplicativo Golang em uma máquina virtual com Linux ou Windows. Você também pode usar serviços como o Elastic Container Service (ECS) para implantar seu aplicativo em um contêiner.

Uma vantagem de usar um serviço de IaaS como o AWS é que você tem controle total sobre a infraestrutura subjacente. Você pode configurar a máquina virtual para atender aos seus requisitos específicos. No entanto, você é responsável por gerenciar e manter a máquina virtual, o que pode ser técnico e trabalhoso.

Outras plataformas de IaaS incluem:

  • Linode
  • Microsoft Azure
  • Rackspace
  • Amazon Web Services (AWS)
  • DigitalOcean
  • Google Compute Engine (GCE)

Plataforma como serviço (PaaS), como o Heroku

Os provedores de plataforma como serviço (PaaS) , como o Heroku, oferecem uma plataforma para a implantação de aplicativos Golang sem sobrecarregar a infraestrutura subjacente.

O Heroku oferece uma interface de linha de comando simples para implantar seu aplicativo com apenas alguns comandos. O Heroku também oferece suporte ao dimensionamento automático e ao balanceamento de carga, facilitando o manuseio do alto tráfego do seu aplicativo.

Uma vantagem de usar um serviço PaaS como o Heroku é que você pode se concentrar no desenvolvimento do seu aplicativo sem se preocupar com a infraestrutura. O Heroku cuida de todo o gerenciamento e manutenção da infraestrutura, o que economiza tempo e recursos.

No entanto, isso também significa que você tem menos controle sobre a infraestrutura e terá que trabalhar dentro das limitações da plataforma.

Outros provedores de PaaS incluem:

  • Render
  • AWS Elastic Beanstalk
  • Microsoft Azure App Service
  • DigitalOcean App Platform
  • The Fly Platform

Backend como serviço (BaaS), como o Back4app

Os provedores de backend como serviço (BaaS), como o Google Firebase e o Back4app, fornecem a solução completa de backend para o seu aplicativo, incluindo um banco de dados, autenticação e hospedagem. O Firebase oferece suporte a várias linguagens de programação, inclusive Golang, e fornece uma API simples que você pode usar para acessar seus serviços.

Uma vantagem de usar um serviço de BaaS como o Firebase é que você pode configurar de forma rápida e fácil um backend para o seu aplicativo sem gerenciar nenhuma infraestrutura. O Firebase oferece uma variedade de recursos e serviços; no entanto, você precisa de mais controle sobre a infraestrutura.

Outras plataformas BaaS incluem:

  • AWS Amplify
  • Cloudkit
  • Backendless
  • Back4App
  • Pocketbase

Containerização como serviço, como o Back4app Containers

A conteinerização é popular para a implantação de aplicativos. Com a conteinerização, você pode empacotar seu aplicativo e suas dependências em um contêiner que pode ser implantado rapidamente em qualquer plataforma que ofereça suporte à tecnologia de contêineres.

O Back4App é a conteinerização como um provedor de serviços que você pode usar para implantar e gerenciar seu aplicativo Golang em um contêiner.

Uma das vantagens de usar a conteinerização como um provedor de serviços como a Back4App é que você pode implementar seu aplicativo em qualquer plataforma que ofereça suporte a contêineres sem se preocupar com a infraestrutura subjacente.

O provedor de CaaS cuida de todo o gerenciamento e manutenção dos contêineres, economizando tempo e recursos. No entanto, talvez você tenha que trabalhar dentro das limitações da plataforma de conteinerização sem acesso à infraestrutura.

Outras plataformas de CaaS incluem:

  • AWS Container Service
  • Azure Container Service
  • Docker Enterprise
  • Google Container Engine
  • IBM Kubernetes Service
  • Oracle Container Service

Processo de implantação da Golang

Aqui, você aprenderá a implantar seu aplicativo Golang na plataforma CaaS da Back4app.

O que é o Back4app?

O Back4app é uma oferta de nuvem que você pode usar para criar e implantar serviços de back-end para seus aplicativos móveis e da Web.

Você pode usar o recurso CaaS do Back4app para implantar e executar contêineres personalizados nos servidores de back-end do Back4app. Você pode adicionar lógica personalizada ao seu aplicativo usando as imagens do contêiner sem precisar gerenciar a infraestrutura do servidor.

Nesta seção, você aprenderá a criar uma API CRUD RESTful simples em Go, colocar programas Go em contêineres e implantar o contêiner no Back4app.

Configuração de seu ambiente de desenvolvimento

Depois de instalar o Go em seu computador a partir da página de downloads, você pode criar um novo diretório e inicializar um novo projeto Go para seu aplicativo Go.

Execute o comando abaixo para criar um novo diretório para seu projeto.

mkdir deployAPI && cd deployAPI

Execute o comando mod init para inicializar um novo projeto em seu diretório de trabalho atual com a ferramenta Go.

Assim:

go mod init

Você criará a API RESTful com o pacote Gorilla Mux.

Execute o comando abaixo para instalar o pacote Gorilla Mux como uma dependência de seu projeto.

go get -u github.com/gorilla/mux

A próxima etapa é a criação da API RESTful. A primeira etapa na criação de uma API RESTful com o Gorilla Mux é importar os pacotes necessários em seu arquivo Go.

Aqui está a lista de importações necessárias para o projeto.

import (
	"encoding/json"
	"log"
	"net/http"
	"strconv"

	"github.com/gorilla/mux"
)

Depois de listar suas importações, você precisará configurar um banco de dados para seu aplicativo. Para simplificar, usaremos um mapa para armazenar e recuperar dados.

Você pode adicionar o mapa ao seu aplicativo da seguinte forma:

var users = map[int]string{}

Como o mapa está vazio, você precisará inserir dados com uma solicitação POST.

A função do manipulador de solicitações POST

Sua solicitação POST deve receber dados do cliente, analisá-los e salvá-los no armazenamento de dados do mapa.

Adicione o bloco de código ao seu aplicativo para implementar o manipulador de solicitação POST:

func createUserHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	id, err := strconv.Atoi(vars["id"])
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	var data map[string]string

	err = json.NewDecoder(r.Body).Decode(&data)
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	users[id] = data["name"]

	w.WriteHeader(http.StatusCreated)
}

A função do manipulador createUserHandler recebe os dados do cliente (JSON), analisa o JSON e salva os dados no mapa. Quando o manipulador adiciona com êxito os dados ao mapa, ele grava o código de sucesso StatusCreated para o cliente.

A solicitação GET

Você lerá os dados do armazenamento de dados com uma solicitação GET. Sua função de manipulador de solicitação GET recuperará uma ID do cliente, pesquisará e retornará os dados ao cliente.

Adicione o bloco de código ao seu aplicativo para implementar o manipulador de solicitação GET:

func readUserHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	id, err := strconv.Atoi(vars["id"])
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	name, ok := users[id]
	if !ok {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	data := map[string]string{"name": name}

	jsonData, err := json.Marshal(data)
	if err != nil {
		w.WriteHeader(http.StatusInternalServerError)
		return
	}

	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(http.StatusOK)
	w.Write(jsonData)
}

A função readUserHandler recupera a ID com a função Vars do pacote mux e pesquisa os dados no mapa antes de retornar os dados como JSON para o cliente, juntamente com um código de sucesso StatusOk.

A função do manipulador de solicitações PUT

Você atualizará os dados em seu armazenamento de dados com uma solicitação PUT. Seu manipulador de solicitação PUT aceitará o ID e um campo JSON para o processo de atualização.

func updateUserHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	id, err := strconv.Atoi(vars["id"])
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	var data map[string]string

	err = json.NewDecoder(r.Body).Decode(&data)
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	users[id] = data["name"]

	w.WriteHeader(http.StatusOK)
}

A função updateUserHandler recebe a ID com a variável vars, decodifica o JSON do corpo da solicitação e atualiza o campo ou a ID com os dados JSON do corpo da solicitação.

A função do manipulador de solicitações DELETE

Sua função de manipulador de solicitação DELETE receberá o ID do campo da solicitação e excluirá o campo do armazenamento de dados.

Adicione o bloco de código ao seu aplicativo para implementar o manipulador de solicitação DELETE:

func deleteUserHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	id, err := strconv.Atoi(vars["id"])
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	delete(users, id)

	w.WriteHeader(http.StatusOK)
}

A função deleteUserHandler exclui o campo com a função delete que recebe o nome do mapa e a ID e retorna o código StatusOk para o cliente.

Montagem das funções do manipulador em rotas

Depois de definir os pontos de extremidade do seu aplicativo, você deve atribuir as funções do manipulador às rotas. As rotas são a interface pública de sua API.

func main() {
	r := mux.NewRouter()

	r.HandleFunc("/users/{id}", createUserHandler).Methods(http.MethodPost)
	r.HandleFunc("/users/{id}", readUserHandler).Methods(http.MethodGet)
	r.HandleFunc("/users/{id}", updateUserHandler).Methods(http.MethodPut)
	r.HandleFunc("/users/{id}", deleteUserHandler).Methods(http.MethodDelete)

	log.Fatal(http.ListenAndServe(":8080", r))
}

Na função principal, r é uma instância de um novo roteador mux, e o método HandleFunc recebe uma rota e uma função de manipulador. A função Methods especifica os métodos HTTP nas rotas.

Como colocar aplicativos Go em contêineres com o Docker

O Docker é uma das tecnologias de conteinerização mais populares. O Docker foi desenvolvido com Go, e você pode colocar seus aplicativos Go em contêineres para portabilidade com o Docker.

Você terá que criar um novo arquivo dockerfile no qual especificará as instruções de compilação.

Execute o comando abaixo para criar um Dockerfile no diretório de trabalho do seu projeto.

touch Dockerfile

Abra o Dockerfile e cole essas instruções de compilação para conteinerizar seu aplicativo Go com o Docker.

# Use an official Golang runtime as a parent image
FROM golang:latest

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Download and install any required dependencies
RUN go mod download

# Build the Go app
RUN go build -o main .

# Expose port 8080 for incoming traffic
EXPOSE 8080

# Define the command to run the app when the container starts
CMD ["/app/main"]

As instruções de compilação no arquivo de encaixe especificam a versão do Go para o projeto, o diretório de trabalho, os arquivos para o aplicativo e as instruções de compilação para o arquivo de encaixe.

Aqui está um detalhamento do Dockerfile:

  • O arquivo começa com FROM golang: latest, que especifica que você deseja usar a versão mais recente da imagem oficial do Golang como a imagem base do seu contêiner do Docker.
  • A linha WORKDIR /app define o diretório de trabalho do seu contêiner como o diretório /app.
  • A opção COPY . /app copia o conteúdo do seu diretório atual para o diretório /app do contêiner.
  • O download do mod RUN go faz o download das dependências necessárias do seu aplicativo.
  • O comando RUN go build -o main . compila seu aplicativo Go e cria um arquivo executável chamado main no diretório /app.
  • A linha EXPOSE 8080 informa ao Docker para expor a porta 8080; a porta que seu aplicativo Go escuta para receber solicitações.
  • A linha CMD ["/app/main"] especifica o comando a ser executado quando o contêiner for iniciado (nesse caso, o executável principal ).

Ao executar o dockerfile, o Docker cria a imagem do aplicativo e expõe o aplicativo na porta 8080.

O comando inicia o contêiner e mapeia a porta 8080 na máquina host para a porta 8080 no contêiner, e você deve conseguir acessar a API em [http://localhost:8080](http://localhost:8080).

Implantação do contêiner no Back4app

Você precisará criar uma conta no Back4app (se ainda não tiver uma) para implantar contêineres.

Aqui estão as etapas para criar uma conta no Back4app.

  1. Acesse o site do Back4app.
  2. Clique no botão Inscrever-se no canto superior direito da página inicial para criar uma nova conta.
  3. Por fim, preencha o formulário de registro e envie-o.

Depois de criar sua conta Back4app, faça login na sua conta e clique no botão NOVO APP no canto superior direito da interface do usuário.

O botão NEW APP o levará a uma página na qual você poderá escolher como implantar o aplicativo. Como você está implantando um contêiner, selecione a opção Containers as a Service.

Criar um novo aplicativo CaaS no Back4app

Em seguida, conecte sua conta do GitHub à sua conta do Back4app. Você pode optar por conceder ao Back4app acesso ao código-fonte de todos os repositórios em sua conta ou a um diretório de projeto específico.

Contêineres do Back4app - Importar o repositório do GitHub.

Escolha o aplicativo que deseja implantar, neste caso, o aplicativo que você criou neste tutorial e, em seguida, clique em Select (Selecionar).

Contêineres do Back4app - Selecione um repositório git

Ao clicar no botão Selecionar, você será levado a uma página em que preencherá as informações sobre o aplicativo, desde o nome até a ramificação, o diretório raiz e as variáveis ambientais.

Certifique-se de preencher todas as variáveis ambientais exigidas pelo seu aplicativo. Depois de preencher os detalhes necessários, clique em Create App (Criar aplicativo).

Clicar nesse botão inicia o processo de implantação do seu aplicativo Go, conforme mostrado na imagem abaixo.

Página de implantação do contêiner do Back4app

Conclusão

Você aprendeu a implantar um aplicativo Go em contêiner no Back4app. Seguindo as etapas deste tutorial, você deverá ter uma API Go em execução no Back4app.

A implantação de seus aplicativos no Back4app é uma ótima maneira de simplificar o gerenciamento da infraestrutura de back-end. O Back4App fornece ferramentas poderosas para gerenciar seus dados, dimensionar seu aplicativo e monitorar seu desempenho. É uma excelente opção para os desenvolvedores que desejam criar aplicativos excelentes em vez de gerenciar servidores.

PERGUNTAS FREQUENTES

O que é Back4App e por que é uma boa plataforma para implantar meu aplicativo?

Back4App é uma plataforma BaaS onde você pode construir, hospedar e escalar seus aplicativos com uma arquitetura serverless. Back4app também oferece serviços de conteinerização permitindo que você gerencie e implante contêineres de software sem ter que se preocupar em gerenciar a infraestrutura subjacente.

Posso implantar outras linguagens como Rust no Back4app com contêineres?

Sim, você pode implementar Rust no Back4App usando tecnologias de conteinerização como Docker. O Back4App suporta contêineres Docker que você pode usar para implementar aplicativos escritos em várias linguagens de programação, incluindo Rust.

Posso dimensionar meu aplicativo em contêiner no Back4App?

Sim, você pode escalar seu aplicativo em contêiner no Back4App com o recurso de dimensionamento automático integrado. O recurso de dimensionamento automático dimensiona automaticamente o número de instâncias do seu aplicativo com base na demanda, garantindo que seu aplicativo possa lidar com o aumento de tráfego e carga de trabalho.


Leave a reply

Your email address will not be published.