Pular para o conteúdo

10 ferramentas escritas em Go que todos desenvolvedores precisam conhecer

Postado em 5 minutos de leitura

Vou apresentar 10 incríveis ferramentas que me ajudam bastante no dia-a-dia. Por serem escritas em Go, a instalação se resume apenas em executar um arquivo e todas elas funcionam no Linux, MacOS e Windows.

1. Caddy

Caddy é um servidor web fácil de configurar e robusto, com ótima performance, para produção. Por padrão, Caddy serve arquivos estáticos que estão na pasta atual. Então, se ele for executado dentro de $HOME/Downloads, todo o conteúdo da pasta vai ficar acessível na rede via protocolo HTTP, usando a porta 2015.
Já substitui o Nginx por ele há alguns anos e não me arrependo. Gosto de usar como proxy para aplicações web e em containers de aplicações SPA (VueJS e ReactJS).

cd $HOME/Downloads
caddy browse

2. Ngrok

Ngrok cria uma URL pública apontando para uma porta específica na máquina onde foi executado. Há diversos casos de uso para ele, por exemplo, demonstrar uma aplicação web enquanto está sendo desenvolvida ou permitir acesso externo via SSH mesmo onde há um firewall bloqueando. Ele é uma solução para máquinas que não possuem IP público ou estão atrás de um NAT.
Seu uso é bem simples, basta especificar o protocolo (http ou tcp) e a porta:

ngrok http 3000

Ele também fornece uma interface web com informações e estatísticas das requisições recebidas.

3. Ctop

Ctop fornece uma visão geral e resumida em tempo real das métricas de utilização dos containers. É similar ao que o comando top, que mostra métricas de utilização da máquina, porém mostra as métricas dos containers.

ctop

# executando como container
docker run --rm -ti -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest

4. GoTTY

GoTTY permite compartilhar um terminal como uma aplicação web. Se usado em conjunto com o ngrok, fornece um terminal de acesso pelo browser como alternativa à uma conexão SSH.
Se você utiliza uma máquina Linux ou MacOS sem SSH Server e gostaria de acessar remotamente, GoTTY é a solução!

gotty -w bash  # utiliza como porta padrão 8080

5. Mattermost Server

Mattermost é um aplicativo de mensagens parecido com o Slack. O server fornece um cliente web mas no site do produto é possível fazer o download de outros clientes para Android, iOS, Windows, macOS e Linux.
Quando falarem sobre Slack vs Discord vs Rocket Chat, você pode incluir o Mattermost e prolongar a discussão. :D

docker run -d -p 8065:8065 mattermost/mattermost-preview

6. Minio

Minio é um servidor de armazenamento de objetos distribuídos de alto desempenho, projetado para infraestrutura de nuvem privada em larga escala. É como se fosse um Amazon S3 ou Google Cloud Storage privado.
Nunca utilizei realmente, só testei, mas achei muito interessante.

export MINIO_ACCESS_KEY="AKIAIOSFODNN7EXAMPLE"
export MINIO_SECRET_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
./minio server $HOME

# executando como container
docker run -p 9000:9000 -v $HOME:/data -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio server /data

7. Piknik

Piknik permite copiar/colar conteúdo pela rede, compartilhando o conteúdo da área de transferência (clipboard). Ele possui plugin para o Visual Studio Code, permitindo que um desenvolvedor utilize o editor de texto para copiar e colar trechos de código.
Utilizo muito na minha casa, quando preciso copiar arquivos entre MacOS, Windows e Linux. Também uso para transferir texto entre editores VS Code rodando no Mac e no Linux.

# configurando e rodando um cliente/servidor (híbrido) na mesma máquina
piknik -genkeys -password
cat > ~/.piknik.toml <<EOF
Listen    = "0.0.0.0:8075"	 # Coloque a porta que o servidor vai ficar escutando
Connect   = "127.0.0.1:8075"
Psk       = "dab9ffb1e63734ea5c5711b578a7de6a94ef6acc14e2d701a05daafcdb49d6f1"
SignPk    = "5eba350eb0110aec3e730d58e68667038e1db21f400dcce3b5791c98b7c48b6e"
SignSk    = "eb17d90e8764d10e26c164148a305c592308581c1b075f0cbcdf7bac82bc1de1"
EncryptSk = "66ca87dad4ccd4fb6977165028615feaa65684a08195eeb21d4b8a5db82e67c1"
EOF
piknik -server

Qualquer máquina na rede pode atuar como cliente:

# configurando um cliente utilizando o mesmo password usado no servidor
piknik -genkeys -password
cat > ~/.piknik.toml <<EOF
Connect   = "192.168.0.5:8075"  # Coloque o IP ou hostname do servidor
Psk       = "dab9ffb1e63734ea5c5711b578a7de6a94ef6acc14e2d701a05daafcdb49d6f1"
SignPk    = "5eba350eb0110aec3e730d58e68667038e1db21f400dcce3b5791c98b7c48b6e"
SignSk    = "eb17d90e8764d10e26c164148a305c592308581c1b075f0cbcdf7bac82bc1de1"
EncryptSk = "66ca87dad4ccd4fb6977165028615feaa65684a08195eeb21d4b8a5db82e67c1"
EOF

Para copiar um conteúdo e disponibilizar para todos os clientes:

piknik -copy < /meu/arquivo.txt

Para colar o conteúdo copiado:

piknik -paste > /arquivo/copiado.txt

8. Pgweb

Pgweb é um cliente web para o banco de dados PostgreSQL. Basta executar o pgweb passando as informações para conectar ao banco de dados e a porta para acesso via browser.
É rápido, leve e muito prático.

pgweb --listen 8899 --url postgres://admin:password@127.0.0.1:5432/mydb?sslmode=disable

9. pRest

pRest fornece uma API Rest para manipular o banco de dados PostgreSQL.

PREST_HTTP_PORT=9191 \
PREST_PG_HOST=127.0.0.1 \
PREST_PG_USER=admin \
PREST_PG_PASS=password \
PREST_PG_DATABASE=mydb \
PREST_PG_PORT=5432 \
PREST_JWT_DEFAULT=false \
PREST_DEBUG=true \
prest

Para executar um SELECT * FROM table:

curl http://localhost:9191/database/schema/table

10. Terraform

Terraform é uma popular ferramenta DevOps para configurar uma infraestrutura de servidores via código, independente do provedor de cloud. Funciona com a AWS, Google Cloud, Digital Ocean, dentre outros.

cat > example.tf <<EOF
provider "aws" {
  access_key = "ACCESS_KEY_HERE"
  secret_key = "SECRET_KEY_HERE"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}
EOF
terraform init
terraform apply

Conclusão

Conversei com vários desenvolvedores e percebi que essas ferramentas são pouco conhecidas. Particularmente acho todas elas muito interessantes e me ajudam demais no dia-a-dia de desenvolvimento de software. E você, já conhecia alguma delas? Conheceu agora e curtiu? Adicionaria mais alguma ferramenta à essa lista? Vamos trocar idéias nos comentários!

  1. https://caddyserver.com
  2. https://ngrok.com
  3. https://ctop.sh
  4. https://github.com/yudai/gotty
  5. https://mattermost.com
  6. https://minio.io
  7. https://github.com/jedisct1/piknik
  8. https://sosedoff.github.io/pgweb
  9. https://postgres.rest
  10. https://www.terraform.io