Otimizando funções com memoize

Em ciência da computação, memoize ou memoization é uma técnica de otimização que faz um cache do resultado de uma função com base nos parâmetros passados para ela.

Essa técnica faz com que a execução real da função só aconteça a primeira vez que o parâmetro ou conjunto de parâmetros é passado, pois como fará um cache do resultado, ao receber os mesmos parâmetros, retornará o valor que está armazenado no cache.

Antes de utilizar a técnica, vamos criar duas funções. A Primeira para calcular o fatorial de um número.

func fatorial(n int) int {
    total := 1
    for i := 2; i <= n; i++ {
        total *= i
    }

    return total
}
Leia mais »

Implementando uma Hash Table

Fala galera, tudo certo?

Na semana passada publicamos um post sobre como funciona uma hash table (link do post). Hoje vamos ver como implementar ela usando zero dependências.

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

Qual a diferença de length e capacity

Quando trabalhamos com slices, existem duas funções essenciais que utilizamos para “medir” o tamanho (length) e a capacidade (capacity) de um slice, que são len e cap, respectivamente.

Mas afinal, qual a diferença de length e capacity?

A documentação do Go define length como sendo a quantidade de elementos em um slice, enquanto capacity é a capacidade do array para abrigar elementos.

No exemplo abaixo vamos criar 2 slices. No primeiro vamos definir somente o length, enquanto no segundo vamos definir o length e a capacity.

Leia mais »

Como fazer benchmark do seu código

Muitas vezes quando vamos escolher um novo framework ou alguma lib, buscamos benchmarks para que nosso programa tenha a melhor performance possível. Isso é ótimo! Mas você já parou para fazer um benchmark do seu programa para tentar entender onde ele pode ser otimizado? Não sabe como? Então vamos ver como fazer.

A funções de benchmark ficam dentro dos arquivos *_test.go e tem, por convenção, o nome BenchmarkSuaFunc.

Muito similar a quando escrevemos testes, vamos usar o pacote testing do go, mas especificamente vamos usar o testing.B como parâmetro da nossa função de benchmark.

Para começar vamos aproveitar uma das funções do post “Qual a melhor forma para aumentar um array?“.

Leia mais »

Qual a melhor forma para aumentar um array?

Nesse post vamos ver 3 formas diferentes de aumentar o tamanho de um array em Go.

Para ficar um pouco mais interessante, vamos trabalhar com 2 arrays. O primeiro será um array de string e o segundo um array de Pessoa.

type Pessoa struct {
    Nome string
    Idade int32
}

Primeira forma é também a mais simples. Particularmente, eu tento evitar ao máximo utilizar esse método para aumentar meus arrays, pois embora ela seja a mais simples, é também a mais custosa.

Leia mais »

Como o bazel funciona internamente?

Por anos Bazel sempre me pareceu uma ferramenta muito boa e ao mesmo tempo, por uma soma da sua linguagem própria (starlark) e a estrutura dos arquivos, muito complicada de aprender.

Somente depois de entender o que acontece “atrás das cortinas” e os conceitos da ferramenta é que finalmente pude começar a tirar o melhor dela. Por isso resolvi criar uma série de posts para compartilhar meu aprendizado.

Se você já teve algum contato com Bazel, vou pedir para que não se preocupe com os arquivos WORKSPACE, BUILD e .bzl por enquanto (se você não teve contato também não precisa se preocupar). Nesse post, vamos deixar esses arquivos de lado e falar um pouco sobre como o bazel funciona internamente.

Leia mais »