Pular para o conteúdo principal

victorstein.dev

48/100 Dias de Golang - Aplicação para buscar previsão do tempo - Parte 5

# Aplicação para buscar previsão do tempo - Parte 5

Hoje vamos dar uma olhada em como organizar a aplicação, separar os arquivos, separar as regras de negócio da aplicação e ver a estrutura de pastas de projetos golang. Encontrei várias fontes sobre esse tema, muitas discussões e a resposta é que depende do tamanho do projeto, qual arquitetura você pretende usar e vários outros fatores. Vou deixar uma lista dos melhores artigos aqui:

Ler Mais

47/100 Dias de Golang - Aplicação para buscar previsão do tempo - Parte 4

# Aplicação para buscar previsão do tempo - Parte 4

Vamos trabalhar com a formatação dos JSON’s nesse post. Atualmente estamos somente exibindo o retorno da API, vamos formatar e exibir somente os campos que temos interesse.

Vamo primeiro editar o arquivo cidade.go. Devemos criar o formato de resposta do JSON. No nosso caso o JSON é uma lista de várias cidade com Nome, ID e Estado

type Cidade []struct {
	Nome   string `json:"nome"`
	ID     int    `json:"id"`
	Estado string `json:"estado"`
}

Na função requestsCidade temos que definir uma variável do tipo Cidade

Ler Mais

46/100 Dias de Golang - Aplicação para buscar previsão do tempo - Parte 3

# Aplicação para buscar previsão do tempo - Parte 3

Nesse post vamos criar o comanda do tempo, recebemos um ID de cidade e retornamos como está o tempo nela. Vamos começar alterando o arquivo tempo.go para receber a flag cidadeID

var cidadeID string

func init() {
	rootCmd.AddCommand(tempoCmd)
	tempoCmd.Flags().StringVarP(&cidadeID, "cidadeID", "i", "1", "ID da cidade")
}

Agora já temos acesso ao ID da cidade, podemos montar o request para a API

Ler Mais

45/100 Dias de Golang - Aplicação para buscar previsão do tempo - Parte 2

# Aplicação para buscar previsão do tempo - Parte 2

Vamos começar criando o projeto Golang:

go mod init cidadeTempo

E instalar as depêndências. Para CLI vamos usar o Cobra. Já vimos sobre o Cobra no dia 40

go get -u github.com/spf13/cobra@latest

E iniciar o projeto:

cobra-cli init

A estrutura do projeto deve ficar assim:

.
├── cmd
│   └── root.go
├── go.mod
├── go.sum
├── LICENSE
└── main.go

E vamos adicionar nossos comando principais, cidade e tempo

Ler Mais

44/100 Dias de Golang - Aplicação para buscar previsão do tempo - Parte 1

# Aplicação para buscar previsão do tempo - Parte 1

Nesses próximos dias vamos construir uma aplicação que será utilizada através de uma CLI que consulta uma API e exibe os dados de resultado. Vamos usar como base a BrasilAPI. Fazer uma CLI onde podemos buscar a previsão do tempo das cidades do Brasil, para isso teremos dois comando principais, buscar ID da cidade e buscar a previsão da cidade com base nesse ID. Podemos incrementar a aplicação, mas o básico será isso. Veja como funcionam as rotas:

Ler Mais

43/100 Dias de Golang - Webservers com Gin

# Webservers com Gin

Golang tem vários frameworks web como Fiber, Echo, Iris, Chi, Http Router, Beego, mas o que escolhi para falar aqui foi o Gin. Gostei dos exemplos, da documentação e de como ele parece fácil de usar. Vamos estruturar uma aplicação bem simples com ele! A instalação deve ser feita com go get -u github.com/gin-gonic/gin

# Retornando um JSON

Assim como no exemplo do dia 42, vamos retornar um JSON. Veja a simplicidade do uso do Gin!

Ler Mais

42/100 Dias de Golang - Webservers em Go com a Biblioteca Padrão

# Webservers em Go com a Biblioteca Padrão

Como vimos até aqui Go possui ótimas bibliotecas na própria linguagem, vamos ver como funciona a net/http, que podemos usar para criar webservers. Vamos criar um webserver com uma rota que retorna um “Olá Mundo”.

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", homeHandler)
    fmt.Println("Servidor rodando na porta 8080...")
    http.ListenAndServe(":8080", nil)
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Olá Mundo!")
}

Olhe como é simples! http.HandleFunc("/", homeHandler) definimos o path da rota e a função que será executada, nesse caso a homeHandler. E depois depois deixamos o serviço escutando na porta 8080 http.ListenAndServe(":8080", nil). Fechou! Se você entrar no http://localhost:8080/ vai ver a mensagem “Olá Mundo!”. Claro que esse exemplo é “ridículo”, mas veja a estrutura geral, muito simples! Vamos evoluir esse exemplo.

Ler Mais

41/100 Dias de Golang - Gerenciando Configurações

# Gerenciando Configurações

Gerenciamento de configurações e variáveis é uma etapa bem importante para qualquer projeto em qualquer linguagem. Como venho do Python, estava buscando algo parecido com o Dynaconf. Vou mostrar o gerenciamento de variáveis de ambiente sem nenhuma lib em Golang e depois usando a bibilioteca envconfig e Viper. Separar configuração do códig é uma prática fundamental. Isso facilita o deploy em diferentes ambientes sem precisar alterar o código. É também uma recomendação clássica do manifesto Twelve-Factor App. Veja esse exemplo bem simples utilizando o os.Getenv

Ler Mais

40/100 Dias de Golang - Cobra CLI

# Cobra CLI

Vamos iniciar o desenvolvimento de um CLI utilizando o Cobra. O Cobra é uma biblioteca poderosa para criar CLIs em Go. Ela é usada por ferramentas populares como o Kubernetes e o Hugo. Vamos iniciar um projeto e adicionar o Cobra.

go mod init novacli

Instalar o cobra

go install github.com/spf13/cobra-cli@latest

Para iniciar o projeto com cobra utilizamos o comando:

cobra-cli init

Isso criará uma estrutura básica com um comando raiz (cmd/root.go).

Ler Mais

39/100 Dias de Golang - Logging com Zap

# Logging com Zap

Zap é uma biblioteca de logging criada e mantida pela Uber, projetada com foco em velocidade, eficiência e estrutura. É uma das bibliotecas de log mais rápidas para Go, segundo benchmarks do próprio repositório do Zap. Possui facilita integração com sistemas como ELK, Grafana Loki, Datadog, …

Vamos criar um projeto e instalar o Zap:

go get go.uber.org/zap

Veja como fica o código usando o SugaredLogger

Ler Mais