close up shot of keyboard buttons

Como fazer fuzz test em requests HTTP (parte 2)

Na primeira parte desse post, vimos como utilizar o fuzz test para gerar payloads automaticamente em nossos testes, o que nos ajudou a encontrar problemas quando o payload não vinha no formato que esperávamos.

Nessa segunda parte, vamos utilizar o fuzz para gerar os inputs que serão utilizados nos campos de um payload correto.

Utilizando o mesmo código do post anterior, antes de começar, vamos fazer uma pequena mudança na validação de e-mail. Além de validar se ele foi preenchido, vamos validar se o e-mail é válido.

Para isso, vamos criar um novo erro e um else para quando o valor do e-mail não esteja vazio.

...

ErrEmailRequired = errors.New("Email is required")

ErrEmailInvalid = errors.New("Email is invalid")

...

if p.Email == "" {
		return ErrEmailRequired
} else {
		rgx := regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$")
		if !rgx.MatchString(p.Email) {
			return ErrEmailInvalid
		}
}
...
Leia mais »

Como utilizar go workspaces

Dando continuidade aos posts onde exploramos as novas funcionalidades do Go 1.18, nesse post vamos ver como utilizar o novo Go Workspaces.

Para começar, vamos criar uma pasta e chama-lá de workspace.

Pequena observação antes de continuar, o nome dessa pasta NÃO tem que ser obrigatoriamente workspace, só coloquei esse nome por achar conveniente.

Agora, dentro da pasta workspace, vamos adicionar uma pasta chamada hello. Nessa pasta vamos colocar o nosso programa.

Dentro da pasta hello, vamos iniciar um novo módulo com o comando go mod init github.com/aprendagolang/hello e adicionar um arquivo main.go com o seguinte conteúdo.

Leia mais »

Quando utilizar generics?

Assim como as goroutines, uma das dúvidas que mais tenho visto quando o assunto é generics, a nova feature do Go 1.18, é quando ela deve ser utilizada.

Nesse post, baseado no post publicado em 12 de abril no blog oficial do Go (When to use generics), vou tentar passar um pouco das dicas dadas pelo Ian Lance Taylor.

Ele começa o primeiro vídeo falando sobre como escrever código Go. De forma muito simples e em tradução livre ele diz:

Escreva código, não desenhe tipos.

Leia mais »

Fuzzy testing

Adicionado ao Go 1.18, essa nova feature para testes promete ajudar a melhorar muito nosso código, já que com ela conseguimos testar inputs diferentes do que adicionamos em nossos testes, cobrindo assim uma gama muito maior de possibilidades.

Antes de continuar, se você caiu aqui mas prefere ver esse tutorial em vídeo, vou deixar aqui o link para um vídeo do nosso canal no YouTube onde mostramos essa belezinha em ação => Como implementar Fuzzy Test em Go.

Continuando….

Vamos imaginar que temos a seguinte função implementada.

Leia mais »

Tudo o que você precisa saber sobre Go 1.18

Já com sua primeira Release Candidate nas ruas, a versão mais aguardada dos últimos tempos está cada vez mais próxima de ser lançada.

Nesse post vou abordar as principais mudanças que essa versão irá trazer.

Any

Na nova versão da linguagem, foi adicionado o novo tipo de dado, o any. Esse tipo nada mais é do que uma alias para interface{}.

Isso não impede ou quebra nenhum código que utilizar interface{}, porém é recomendado mudar para any por questões de leitura.

Se você achar estranho, não se esqueça que o tipo byte é só um alias para uint8.

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!


Se inscreva na nossa newsletter

* indicates required

Trabalhando com generics

Se você está no mundo Go a algum tempo, com certeza já ouviu falar desse carinha ai. Para aqueles que estão chegando agora, generics é uma das features mais pedidas/aguardadas desde que a linguagem foi liberada para o mundo.

Como já falamos em outros posts, Go é uma linguagem de tipagem forte, ou seja, sempre precisamos declarar o tipo da variável, parâmetros de uma função e seus retornos. Isso acaba fazendo com que, em algumas ocasiões, seja necessário duplicar nosso código só para que ele atenda dois tipos diferentes de dados.

Um exemplo básico desse problema seria uma função que soma uma lista de valores, onde sem generics, caso fossemos somar int64 e float64, seria necessário criar duas funções basicamente iguais, só mudando o tipo de dado do parâmetro e do retorno.

Leia mais »