Cesar Gimenes códigos, artigos, golang e unix

programação, eletrônica, golang, UNIX e muito mais papo nerd

Unix Domain Socket com Golang

Unix domain socket Unix Domain Sockets ou IPC socket é uma forma muito pratica e segura de trocar informações entre processos. Essa forma de IPC usa um arquivo como endereço/name space no lugar de um IP e uma porta como seria em uma comunicação via rede. Uma coisa importante para ter em mente é que como vamos usar um arquivo o servidor é responsável por ele, se não existir ele sera criado automaticamente mas se não existir você vai receber um erro com algo como “bind: address already in use” que significa que o arquivo já existe e o servidor não tem como reaproveitar um arquivo que já existe, o correto é fazer shutdown elegantemente e fechar e apagar o arquivo antes de derrubar o servidor.

Um JSON lint em Golang

Um JSON lint em Golang Esse é um pequeno utilitário de linha de comando para validar e formatar JSON que também pode ser usado como pacote, a ideia inicial era criar um parser para validar o JSON mas não foi necessário, o próprio Go traz todas as informações que precisamos no erro inclusive o offset do erro e dai foi simples mostrar os erros de forma mais completa inclusive indicando com uma seta exatamente onde esta o erro.

Gerador de UUID

Gerador de UUID Mais um utilitário no nosso repositório do GoSidekick, um utilitário para gerar UUID v4 (aquele que é totalmente aleatório). package main import ( "fmt" "strings" "github.com/crgimenes/goconfig" "github.com/google/uuid" ) func main() { type configFlags struct { CarriageReturn bool `json:"cr" cfg:"cr" cfgDefault:"false"` LineFeed bool `json:"lf" cfg:"lf" cfgDefault:"false"` Uppercase bool `json:"u" cfg:"u" cfgDefault:"false"` Armored bool `json:"a" cfg:"a" cfgDefault:"false"` ArmorChar string `json:"ac" cfg:"ac" cfgDefault:"\""` NtoGenerate int `json:"n" cfg:"n" cfgDefault:"1"` IDSeparator string `json:"ids" cfg:"ids" cfgDefault:""` } cfg := configFlags{} err := goconfig.

Trafegando dados entre middleware http usando contexto em Golang

Trafegando dados entre middleware Já vimos como funciona um middleware HTTP e agora vamos ver como passar informação entre os middlewares. Isso é usado por exemplo para passar as credenciais de um usuário para o proximo middleware e qualquer outra informação que seja coletada em algum dos middlewares e você queria passar para frente. Antes de mais nada vamos fazer um exemplo para mostrar da forma mais clara possível quando os middlewares são executados, isso é muito importante porque erros no entendimento dessa ordem de execução é uma incrível fonte de bugs.

Como fazer HTTP middleware em Go tanto usando Negroni como usando a biblioteca padrão

Usar middleware HTTP são muito úteis para evitar duplicidade de código quando você tem vários endpoints na sua aplicação, por exemplo se você quiser ter certeza que as credenciais do usuário foram verificadas, ou que o conteúdo foi comprimido, e assim por diante. A coisa mais importante que se deve lembrar é que cada middleware vai ser chamado na ordem que foi registrado, então por exemplo podemos ter um middleware que tem a responsabilidade de preparar o ambiente, como abrir o banco de dados ou preparar o controle de sessão que vem antes do middleware que valida as credenciais do usuário.

Usando goto e label em Go

goto e label em Go A instrução goto tem uma má fama que vem do tempo do BASIC quando era usada indiscriminadamente e acabava tornando o código impossível de ler. Em linguagens modernas entretanto é uma instrução perfeitamente válida e desde que usada com critério pode ajudar a tornar seu código mais limpo. Alem de goto as instruções break e continue também aceitam labels, isso é muito util para quando por exemplo se quer sair de um for aninhado em outro for ou especificar para qual dos fors aninhados se quer fazer continue.

Um sistema de mensageria extremamente rápido com NATS e Golang

mensageria com NATS Para quem precisa que vários sistemas se comuniquem entre si e precisa de velocidade e simplicidade o NATS é uma grande ajuda. Uma das características mais interessantes é a incrível velocidade e um protocolo simples que pode ser facilmente implementado faz com que o NATS seja usado desde para IoT com bibliotecas cliente escritas até mesmo para Arduino quando para comunicação entre serviços muito maiores.

Testando código Golang no Travis-CI usando Docker

Testando o código Essa é uma daquelas gambiarras que salva nossa pele de vez em quando. Eu precisava rodar um código com um ambiente muito especifico e a única forma de montar o ambiente desse código com todas as peculiaridades dele é criar um containers docker, dessa forma consigo dizer exatamente a versão do que esta instalado e ter certeza que o ambiente esta perfeito. Mas daí eu precisava rodar os testes que são executados pelo Travis-CI e claro que não conseguia montar o ambiente idêntico ao do container no Travis.

Protocol Buffers

Este é o primeiro de uma série de tutoriais rápidos onde pretendo cobrir o uso de gRPC e vários aspectos como testes, TLS, boas praticas e muito mais. Para iniciar com gRPC precisamos ir até a base então vamos primeiro falar de Protocol Buffers. Protocol Buffers é uma forma simples e agnóstica com relação a linguagem de se definir uma estrutura de dados, como XML só que melhor, mais simples e mais rápido, muito mais rápido.

ssh usando chaves de acesso

Acessar servidores via ssh usando um conjunto de chaves publica/privada é mais seguro e pratico principalmente mais seguro, alem de facilitar a automação de várias tarefas. Criando as chaves Primeiro crie as chaves com o seguinte comando: mkdir ~/.ssh ssh-keygen Precisa fazer isso apenas uma vez na maquina cliente e um conjunto de chaves será gerado, você pode definir o nome do arquivo que por padrão seria id_rsa para a chave secreta e id_rsa.