Implementando integração com Google reCAPTCHA

Para proteger os formulários públicos de uma aplicação de serem bombardeados com spam, normalmente colocamos um recaptcha.

Primeiramente precisamos ir até a página https://www.google.com/recaptcha/admin/create para criar as chaves de segurança.

Preencha o formulário com os dados solicitados e clique em submit. Sobre o tipo de reCAPTCHA, a diferença entre a V2 e V3 é que a V3 apresenta um desafio, enquanto a V2 é aquela que só verifica se não é uma pessoa.

Na próxima página, serão exibidas duas chaves de segurança. A primeira será inserida no frontend e a segunda no backend.

Leia mais »

Generics: maps e comparable

Generics é uma das features mais esperadas da linguagem Go. Por isso, nesse vídeo mostramos mais um pouco dessa feature e da nova constraint comparable.

Se você quiser saber mais sobre generics, abaixo deixo dois links:

Deixem suas dúvidas nos comentários.

Até a próxima!


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

* indicates required

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

Implementando algoritmo de bubble sort

Hoje começamos uma nova série no nosso canal do YouTube, onde vamos implementar vários algoritmos.

Nesse primeiro vídeo, implementamos o algoritmo de ordenação bubble sort.

Deixem suas dúvidas nos comentários.

Até a próxima!


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

* indicates required

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

Implementando um worker pool

Agora que já falamos praticamente tudo que havia para ser falado sobre goroutines e channels, vamos utilizar esse conhecimento para implementar um worker pool.

Se você não conhece o termo, um worker pool é basicamente uma coleção de threads que ficam esperando tarefas serem atribuídas a elas. Quando a thread finaliza a tarefa que foi atribuída, se torna disponível novamente para execução de uma nova tarefa.

Antes de começar a meter a mão na massa, vou deixar aqui o link para os outros posts da série sobre goroutines e channels.

O worker pool que vamos implementar irá somar os dígitos passados e armazenar o resultado.

Leia mais »

Testando API’s feitas com gorilla/mux

Algumas semanas atrás implementamos uma API utilizando gorilla/mux (link do post). No entanto, deixamos de lado algo que é muito importante, os famosos testes. Por isso, nesse post vamos corrigir essa falha e adicionar alguns testes ao nosso projeto.

Para começar, vamos criar um arquivo com o nome de hello_test.go dentro da pasta handlers. Nesse arquivo vamos adicionar um teste para a função HandleHello.

func TestHandleHello(t *testing.T) {
}

Com a função de testes iniciada, a primeira coisa que vamos fazer é criar uma struct anônima para nos auxiliar com uma massa de dados para teste. Dessa forma conseguiremos testar o mesmo endpoint com vários inputs diferentes.

Leia mais »

Implementando uma Queue (fila)

Dando continuidade nas nossas implementações de estruturas de dados, nesse post vamos mostrar como implementar uma Fila (post teórico) sem qualquer dependência externa.

Deixem suas dúvidas nos comentários.

Até a próxima!


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

* indicates required

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

Buildando aplicações com Bazel (parte 2)

Na primeira parte desse tutorial, configuramos o Bazel e o gazelle em nosso projeto. Ao final conseguimos utilizar o Bazel para gerar nosso arquivo binário.

Agora que já temos todo o ambiente configurado e funcionando, vamos adicionar as regras para gerar uma imagem e subir ela para um registry.

Primeiro passo é adicionar o http_archive das regras do docker no arquivo WORKSPACE.

http_archive(
    name = "io_bazel_rules_docker",
    sha256 = "59536e6ae64359b716ba9c46c39183403b01eabfbd57578e84398b4829ca499a",
    strip_prefix = "rules_docker-0.22.0",
    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.22.0/rules_docker-v0.22.0.tar.gz"],
)
Leia mais »

Buffer de mensagens em channels

Dando continuidade ao nosso estudo sobre channels, nesse post vamos falar sobre como fazer buffer de mensagens.

Até agora, todos os exemplos que vimos de channels no post “O que são e como utilizar channels” não fazem buffer das mensagens, ou seja, ao escrever uma mensagem no channel, a goroutine que escreveu fica aguardando até que outra goroutine faça a leitura daquela informação. Somente após a leitura é que a goroutine de escrita consegue voltar a escrever algo no channel.

Utilizar buffer de mensagens faz com que a goroutine de escrita seja bloqueado de escrever no channel somente quando o buffer estiver cheio. Já a de leitura só ficará bloqueada quando o buffer estiver vazio. Logo, utilizar um buffer de mensagens pode ajudar com que o trabalho das goroutines seja mais fluido.

Para criar um channel com buffer, tudo que precisamos fazer é passar um parâmetro adicional na sua criação para definir a capacidade máxima.

Leia mais »

Implementando uma API com Fiber

Embora eu não tenha dito no post anterior, semana passada iniciamos uma nova série aqui no blog onde vamos implementar uma API bem simples em alguns frameworks web.

Dando continuidade a essa série, hoje vamos implementar uma API utilizando o Fiber, um framework inspirado no Express do Node e que trabalha com Fasthttp ao invés do net/http.

Como podemos ver no gráfico abaixo, uma de suas características mais marcantes é a performance.

Leia mais »

Implementando uma API com gorilla/mux

Sem dúvidas um dos routers mais famosos e utilizados no mundo Golang, hoje vamos ver como implementar uma API utilizando gorilla/mux.

Para quem não conhecer, gorilla/mux ajuda na hora de fazer o match da URL que está sendo chamada com a função que vai tratar aquela URL. Além dessa facilidade, um dos principais benefícios de se utilizar gorilla/mux é que ele implementa a interface http.Handler nativa do Go.

Sem mais delongas, vamos começar implementar nossa API instalando o gorilla/mux.

$ go get -u github.com/gorilla/mux
Leia mais »