Golang

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.

Ebiten - Package para criar jogos em Golang

No episódio de hoje do grupo de estudos falamos do GoSidekick, um repositório onde estamos colocando alguns utilitários para ajudar o dia a dia do programador e também falamos sobre a Ebiten, um package muito completo para criar jogos com Golang. Código fonte de hoje: gosidekick ebiten ebiten page graphos Repositório do nosso grupo E você encontra mais exemplos aqui Pagina do grupo de estudos

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.

Usando docker para carregar o Newsletter e PostgreSQL

Usando Docker Nesse episódio do grupo de estudos vimos como colocar uma aplicação para rodar dentro de um container Docker, também criamos um Makefile para ajudar a executar os comandos docker e todo o básico para rodar nosso newsletter em um container. Nosso exemplo de Makefile .PHONY: up up.build rmi stop down purge up: docker-compose up up.build: docker-compose up --build down: docker-compose down --remove-orphans stop: docker-compose stop rmi: docker system prune -f purge: docker system prune -fa Esse é nosso exemplo de Dockerfile já usando múltiplos estágios para só levar para a imagem final o executável e o mínimo para funcionar assim gerando uma imagem bem pequena.

Um newsletter feito com SendGrid, PostgreSQL e Golang

Ainda tem muito trabalho para fazer mas esse é o inicio do nosso sistema de newsletter, ele já faz algumas coisas bem legais como mandar mensagens via SendGrid e criar registros no PostgreSQL mas ainda temos muito trabalho pela frente. Apesar de ainda incompleto tem muita coisa útil do nosso dia a dia programando, coisas como gravar registros em um banco de dados, um servidor web, tratar um formulário, usar uma API e por ai vai.

JSON, criando seu próprio Marshal e Unmarshal

Continuando a conversa sobre interfaces e sobre manipulação de JSON tem um recurso muito útil que usamos para ajudar o nosso sistema a falar melhor com o PostgresQL e pREST. O formato de data padrão do Postgres é incompatível com o formato padrão do Go e o nosso sistema usa muito JSON para tanto mandar como receber informações do banco de dados. Ter que lembrar toda hora de fazer o parser da data para o formato correto simplesmente não é pratico, é muito melhor ensinar o Go como lidar com data e hora no bom e velho formato ISO 8601.

interface como um contrato

Falamos desse mesmo tema na nossa lista de exemplos do grupo de estudos sobre interfaces mas vamos isso foi la no longínquo ano de 2016 então vamos tentar fazer um novo exemplo para mostrar como usar uma interface como um contrato que permite você passar tipos diferentes para uma função ou aceitar tipos diferentes em uma interface desde que ele aceite implemente o contrato que em outras palavras significa implementar as funções descritas na interface.

interface vazia

Interface vazia é um tipo que aceita qualquer coisa, você pode passar o que quiser como parâmetros de função ou variáveis do tipo interface{}. Parece muito pratico a primeira vista mas quando usamos interface{} estamos jogando pela janela a validação de tipos feita em tempo de compilação e perdemos uma das grandes vantagens de uma linguagem compilada de tipagem forte e estática. E como a checagem de tipo não vai acontecer em tempo de compilação é sua responsabilidade checar se esta recebendo o tipo certo em tempo de execução.

JSON Dicas e Truques

Convertendo e validando JSON É sempre bom saber se o JSON é valido antes, isso poupa tempo de debug procurando um problema que não esta no seu código, para isso uma boa ferramenta on-line é o JSONLint Outra ferramenta on-line muito boa é o JSON-to-Go para converter arquivos JSON em struct Go, ele não vai converter partes repetitivas em sub-structs mas ajuda muito, principalmente quando a estrutura é muito grande e complexa.

rclone o rsync para cloud storage

rclone é o rsync para a nuvem, para você mover arquivos usando vários providers como Dropbox, Amazon S3, DigitalOcean, Google Drive e muitos outros. E claro, escrito em go, pode ser instalado com um simples “go get”. Links mencionados, alguns foram mencionados fora da gravação: rclone Fonte do rclone no GitHub Repositório do nosso grupo E você encontra mais exemplos aqui Pagina do grupo de estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack e procure por #brazil

Acessando Dropbox com Golang

Precisei criar um pacote Go para ao Dropbox e fazer algumas operações basicas, listar arquivos, upload e download, para isso usei o dropbox-sdk-go-unofficial. Conectando Dropbox Para conectar o dropbox precisamos das credenciais de acesso, a forma mais fácil é criar um token, para isso entre em Dropbox developers apps e crie uma aplicação, então dentro do painel da aplicação crie o token. Configurando o sistema Todas as funções precisam das configurações com as credenciais de acesso e outros parâmetros úteis como por exemplo o nível de log.

Postgresql com FUSE, Hangout do grupo de estudos de Go 2018-07-26

Hoje complementamos o grupo de estudos passado mostrando como montar um banco de dados Postgresql como sistema de arquivos. Links mencionados, alguns foram mencionados fora da gravação: Código fonte de hoje FUSE Filesystem in Userspace Repositório do FUSE Fuse for macOS Repositório do nosso grupo E você encontra mais exemplos aqui Pagina do grupo de estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar [entre no canal de Go no slack https://invite.

Filesystem com FUSE, Hangout do grupo de estudos de Go 2018-07-12

Hoje demonstramos como criar um pequeno sistema de arquivos em userland e em modo somente leitura. Apesar do exemplo ser simples criar um sistema de arquivos é algo bem poderoso, imagine poder usar todas as ferramentas que você já esta acostumado como grep, find e outras para por exemplo procurar informações no seu banco de dados sem nem mesmo precisar de SQL :D Links mencionados, alguns foram mencionados fora da gravação:

Usando gofn para subir containers docker e rodar Clojure e Python

Como carregar containers Docker usando gofn Primeiro instanciamos a struct BuildOptions que vai informar para o gofn os detalhes do container como o nome da imagem por exemplo. buildOpts := &provision.BuildOptions{ ImageName: "nome da imagem aqui", StdIN: "o que você quer passar no stdin para o container aqui", DoNotUsePrefixImageName: true, } Depois instanciamos as opções do container por exemplo se você quer passar variáveis de ambiente.

Usando defer para mudar o valor de retorno

Hoje mostramos como usar o defer e alterar o valor de retorno de uma função. package main import ( "fmt" ) func processValue1(s string) (ret int) { for _, v := range s { if v != '0' { ret = (ret + 1) * 4 return } ret++ } ret = (ret + 1) * 4 return } func processValue2(s string) (ret int) { defer func() { ret = (ret + 1) * 4 }() for _, v := range s { if v !

O pacote termbox

Hoje mostramos um pequeno jogo feito estilo anos 80 para terminal usando o pacote termbox que ajuda muito na criação de aplicativos em modo texto. Também falamos sobre canais e como usar o comando select para fazer o loop de eventos do nosso jogo. Na parte “out of the records” falamos de retrocomputação, horta vertical, sistemas de irrigação robotizado e por ai vai. Links mencionados, alguns foram mencionados fora da gravação:

O pacote readline

Hoje falamos sobre o pacote readline, um pacote bem útil quando se quer receber entradas do usuário via linha de comando, por exemplo usamos readline para o REPL da Rumlang. Na parte “out of the records” falamos de tudo, desde a compra do GitHub pela Microsoft até criptomoedas e blockchain então se você esta assistindo isso pelo Youtube tente participar dos hangouts, tem muito mais coisas para você se divertir e aprender.

O pacote archiver

Nessa edição falamos do pacote archiver que é uma forma ferramenta muito simples para criar e extrair arquivos comprimidos de vários tipos diferentes e pode ser usado tanto como pacote dentro do seu programa como direto na linha de comando. Também falamos mais um pouco sobre testes e mostramos uma pequena armadilha que pode te poupar algum tempo depurando código. Links mencionados, alguns foram mencionados fora da gravação:

golang build tags

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Hoje falamos de como usar as build tags para fazer compilação condicional em golang. Links mencionados, alguns foram mencionados fora da gravação: Exemplo de build tags no grupo de estudos Documentação do pacote build Go advanced testing tips & tricks Using Go’s build constraint tag to help build mock services for service testing Repositório do nosso grupo E você encontra mais exemplos aqui Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack e procure por #brazil

json.Marshal

Algumas dicas rápidas para usar json.Marshal Os campos da struct que você quer colocar dentro do JSON, ou seja, “fazer o Marshal”, precisam ser declarados com a primeira letra maiúscula tornando esses campos públicos, caso contrário a função Marshal não consegue encontrar os campos. O retorno de json.Marshal é um array de bytes, para converter para string basta fazer cast (forçar a conversão) usando string(nomeDoVetor). É uma boa prática usar os nomes dos campos quando for popular a struct.

HasPrefix

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Pegando o começo de uma string com Go ou Python Awesome Go Código fonte do pacote strings Repositório do nosso grupo E você encontra mais exemplos aqui Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack e procure por #brazil

The Star Wars API

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: SWAPI: https://swapi.co A SWAPI client written in Go: https://github.com/peterhellberg/swapi JSON Server: https://github.com/typicode/json-server Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Gerando posts do HUGO via Go

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Código do gerador de posts: https://github.com/go-br/sitegen curl-to-Go: https://mholt.github.io/curl-to-go/ JSON-to-Go: https://mholt.github.io/json-to-go/ Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazil

XML e Pizza

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Pizza De Dados http://pizzadedados.com Exemplo de XML do nosso grupo https://github.com/go-br/estudos/tree/master/xml Repositório do Ricardo https://github.com/chapzin/GoSped/blob/master/Model/NfeProc.go Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

XML

XML Este é um exemplo de como ler um feed RSS2 e interpretar o retorno para extrair os dados que queremos. Primeiro criamos as structs que vão conter os dados vindos do XML // RSS contem a base da estrutura do feed type RSS struct { XMLName xml.Name `xml:"rss"` Version string `xml:"version,attr"` Title string `xml:"channel>title"` Link string `xml:"channel>link"` Description string `xml:"channel>description"` PubDate string `xml:"channel>pubDate"` ItemList []Item `xml:"channel>item"` } // Item contem os posts no feed type Item struct { Title string `xml:"title"` Link string `xml:"link"` Description string `xml:"description"` Content string `xml:"encoded"` PubDate string `xml:"pubDate"` Comments string `xml:"comments"` } Então baixamos o feed da internet

Jupyter Notebook com Go

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Materia do Yu Watanabe: https://medium.com/@yunabe/interactive-go-programming-with-jupyter-93fbf089aff1 Repositório da Jessica com os arquivos do docker: https://github.com/jtemporal/jupytergo Exemplos usando Jupyter com Go https://github.com/jtemporal/lgo/tree/master/examples Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Middleware

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Exemplo enviado pelo Felipe: https://play.golang.org/p/8SjYn-cisj Exemplo do servidor HTTPS com múltiplos domínios e múltiplas assinaturas: https://github.com/go-br/server Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br NATS - The Cloud Native Messaging System: https://github.com/nats-io https://github.com/nats-io/gnatsd gokrazy kernel+go para Raspberry Pi 3 https://gokrazy.

HTTPS com múltiplos domínios

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Nosso domínio ainda sem nada la: https://gopher.pro.br Exemplo do servidor HTTPS com múltiplos domínios e múltiplas assinaturas: https://github.com/go-br/server Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Errors

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Errors: https://golang.org/pkg/errors/ Ferramenta de geração de documentação para API https://apiary.io http://dredd.io/en/latest/ Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Repositório do nosso grupo: https://github.

Linguagens

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Beerwar: https://github.com/avelino/beerwar Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: RealTimeBattle: http://realtimebattle.sourceforge.net/ Should I Rust, or Should I Go: https://codeburst.io/should-i-rust-or-should-i-go-59a298e00ea9 Unity 3d: https://unity3d.

Queue

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Exemplos de fila: https://github.com/go-br/queue beanstalk: github.com/kr/beanstalk Essa é a versão do package que estamos mantendo: github.com/nuveo/beanstalk Event Service Specification: https://www.omg.org/spec/EVNT/1.2/PDF Repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Go English

Go English Go English é a versão em Go do zzenglish. Funções ZZ é um conjunto dos mais variados aplicativos, escritos em shell script, com as mais variadas aplicações. Dentre eles, o zzenglish, objeto deste estudo. O ZZEnglish Abaixo, temos a codificação original, do miniaplicativo. zzenglish () { zzzz -h english "$1" && return test -n "$1" || { zztool -e uso english; return 1; } local cinza verde amarelo fecha local url="http://www.

HTTP Server

HTTP Server Este é um pequeno servidor HTTP usado para testes de clientes. Ele abre a porta 8080 e ecoa tudo que for enviado para ele via terminal. Para executar basta go get ./... go run main.go Se quiser ver um exemplo um pouco mais avançado usando HTTPS e servindo múltiplos domínios vá para go-br/server Arquivos desse post: server/README.md server/main.go

Storing

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Women Who Go Sampa: https://www.meetup.com/Women-Who-Go-Sampa/ Apply functional options pattern based on: https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis Storing: https://github.com/nuveo/storing Novo repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Closer

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Tabuada com algoritmo genetico do Vinicius: http://trumae.github.com/tabuada Novo repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazil

Novo repo e tests

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Novo repositório do nosso grupo: https://github.com/go-br/estudos E você encontra mais exemplos aqui: https://github.com/go-br vgo, Russ Cox, Sam e Jess: https://www.youtube.com/watch?v=sbrZfPgNmfw goconfig: https://github.com/crgimenes/goconfig Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Regexp

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Exemplo de regexp no grupo de estudos: https://github.com/go-br/estudos/tree/master/regexp Rum playground https://github.com/rumlang/playground Manual do pacote regexp: https://golang.org/pkg/regexp/ Parser lisp: https://github.com/crgimenes/goblin regex-golang: https://regex-golang.appspot.com regex101: https://regex101.com Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Rumlang

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: rumlang: https://github.com/rumlang Rum playground https://github.com/rumlang/playground Parser: https://github.com/crgimenes/goblin Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

sync.Once

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: sync.Once: https://golang.org/pkg/sync/#example_Once Palestra Felipe sobre context https://github.com/felipeweb/talks/tree/master/context Rumlang https://github.com/rumlang/rum Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

defer e for

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Rumlang https://github.com/rumlang/rum grumpy na Python Brasil https://www.youtube.com/watch?v=su62_FkIsrg mypy… É a gente falou de python também ¯_(ツ)_/¯ http://mypy-lang.org Awesome Go https://awesome-go.com Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

internal

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Standard Go Project Layout: https://github.com/golang-standards/project-layout Issue no prest: https://github.com/prest/prest/issues/268 package main: https://www.youtube.com/channel/UCI39wKG8GQnuzFPN5SM55qw Variable models in Go: https://standupdev.com/wiki/doku.php?id=variable_models_in_go Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

rumlang gosidekick

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Gosidekick: github.com/crgimenes/gosidekick Rumlang: github.com/rumlang/rum Blackfriday: gopkg.in/russross/blackfriday.v2 Minify: github.com/tdewolff/minify Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

histograma e entropia

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Histograma https://github.com/crgimenes/histograma Entropia da senha https://github.com/crgimenes/gopsc Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

pREST

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: CRUD https://www.youtube.com/watch?v=CkdSQZD-ECE https://github.com/crgimenes/gocrud Go Hands On: https://github.com/go-br/estudos goconfig https://github.com/crgimenes/goconfig Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Busca cotação do dolar

Busca cotação do dolar Sem argumentos, Busca cotação do dólar no Banco Central. Inspirado por zzdolar Arquivos desse post: godolar/README.md godolar/godolar.go godolar/godolar_test.go

CRUD com pREST

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: pREST https://github.com/prest/prest gourd https://github.com/crgimenes/gocrud Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Brincando com Wikipedia e Go

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Continuous Delivery https://github.com/drone/drone Pair programming https://marketplace.visualstudio.com/items?itemName=shyykoserhiy.sockscode-vscode Criptomoeda em Go https://github.com/decred Computação Quântica https://www.youtube.com/watch?v=fLN1zQOPT2E Dica para usar curl url | python -m json.tool https://github.com/DenizParlak/Zeus Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Wikipedia API

Wikipedia API Brincando com ler dados da wikipedia curl https://en.wikipedia.org/w/api.php\?action\=opensearch\&format\=json\&search\=golang package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" "reflect" "strings" ) func main() { resp, err := http.Get("https://pt.wikipedia.org/w/api.php?action=opensearch&format=json&search=Go_(linguagem_de_programação)") if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) } //fmt.Println(string(body)) var m []interface{} err = json.Unmarshal(body, &m) if err != nil { fmt.Println(err) return } r := make(map[string]int) walker(m, r) for k, v := range r { fmt.

zip

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Exemplos para comprimir e descomprimir arquivos https://github.com/go-br/estudos/tree/master/zip Bancos de dados em Go https://awesome-go.com/#database Hacktoberfest https://hacktoberfest.digitalocean.com/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Zip

Zip Como comprimir e descomprimir arquivos zip Comprimir package main import ( "archive/zip" "fmt" "io" "os" ) func main() { // arquivos para comprimir files := []string{ "teste1.txt", "teste2.txt", "teste3.txt", } // cria o arquivo .zip zipFile, err := os.Create("arquivo.zip") if err != nil { fmt.Println(err) return } defer zipFile.Close() // quando terminar fecha o arquivo .zip // cria um writer que vai escrever no arquivo .zip zipWriter := zip.

beanstalk com Go

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Beanstalkd: https://kr.github.io/beanstalkd/download.html Aurora: https://github.com/xuri/aurora Exemplos do grupo de estudos: https://github.com/go-br/estudos/tree/master/beanstalk Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

beanstalk

beanstalk beanstalk é um servidor de filas bastante estável e rápido, e o melhor de tudo, com uma API fácil de conectar com suporte a Go. instruções para instalação você encontra aqui: https://kr.github.io/beanstalkd/download.html aurora Aurora é um visualizador web para você gerenciar suas filas no beanstalk, escrito em go e fácil de usar, veja como instalar aqui: https://github.com/xuri/aurora Exemplos Enviando dados para a fila package main import ( "fmt" "time" "github.

Calculadora 555 em Go

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Simulador 555 do Cassio: https://github.com/cassiobotaro/meu_primeiro_programa hacktoberfest: https://hacktoberfest.digitalocean.com/ Outros links mencionados Go Hands On: https://github.com/go-br/estudos Templates em Go https://golang.org/pkg/text/template/#Template.ExecuteTemplate Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Serial

Serial Em exemplo simples de como ler a porta serial usando o pacote tarm/serial. instalar o pacote go get github.com/tarm/serial Abre a porta serial c := &serial.Config{Name: "/dev/porta-serial", Baud: 115200} s, err := serial.OpenPort(c) if err != nil { log.Fatal(err) } Lendo buf := make([]byte, 128) n, err := s.Read(buf) if err != nil { log.Fatal(err) } log.Print(string(buf[:n])) Fechando É muito importante sempre fechar a porta serial porque esse se ela ficar aberta nenhum programa vai conseguir usar ela.

context

context Exemplos simples de contexto import ( "bufio" "context" "fmt" "os" "time" ) func main() { ctx := context.Background() ctx, cancel := context.WithTimeout(ctx, 1*time.Second) defer cancel() go func(ctx context.Context, cancel context.CancelFunc) { s := bufio.NewScanner(os.Stdin) s.Scan() cancel() }(ctx, cancel) select { case <-time.After(5 * time.Second): fmt.Println("timeout") case <-ctx.Done(): fmt.Println(ctx.Err()) } } Arquivos desse post: context/README.md context/example1 context/example2

Testes goconvey

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: goconvey: https://github.com/smartystreets/goconvey gocov: https://github.com/axw/gocov gofn: https://github.com/nuveo/gofn grupo de estudos de Rust: https://github.com/rust-br/estudos Bro: https://github.com/marioidival/bro ginkgo: https://github.com/onsi/ginkgo check: https://gopkg.in/check.v1 Rust: https://github.com/rust-lang/rust Gerrit https://www.gerritcodereview.com/ Outros links mencionados Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

CRC

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: CRC: https://github.com/go-br/estudos/tree/master/crc Teclado com um só botão: https://www.youtube.com/watch?v=2ZL3OR1C4WQ Outros links mencionados Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

CRC

CRC Calcular o CRC de uma string ou um arquivo é muito útil para garantir que algum dado não foi alterado. As funções CRC tem a vantagem de serem rápidas comparado com outras formas de hash. package main import ( "fmt" "hash/crc32" ) func main() { valor := "Isto é um teste" checksum := crc32.ChecksumIEEE([]byte(valor)) fmt.Printf("Checksum: 0x%x\n", checksum) } Arquivos desse post: crc/README.md crc/checksum32 crc/checksum64

Lua + Go

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Site do pREST https://postgres.rest Issue para implementar MySQL no pREST https://github.com/prest/prest/issues/213#issuecomment-327961800 Funções ZZ http://funcoeszz.net/list.html Grupo de estudos de RUST https://t.me/rustlangbr GopherLua https://github.com/yuin/gopher-lua GopherLua Benchmarks https://github.com/yuin/gopher-lua/wiki/Benchmarks Exemplos de Go + Lua https://github.com/go-br/estudos/tree/master/lua Outros links mencionados Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.

Exemplos de Go + Lua

Exemplos de Go + Lua Lua é uma ótima linguagem e combina perfeitamente como uma linguagem de script para ajudar nos seus projetos com Go go get github.com/yuin/gopher-lua Arquivos desse post: lua/README.md lua/example1 lua/example2

Gera um número aleatório

Gera um número aleatório Sem argumentos, comporta-se igual a $RANDOM. Apenas um argumento, número entre 0 e o valor fornecido. Com dois argumentos, número entre esses limites informados. Inspirado por zzaleatorio Arquivos desse post: goaleatorio/README.md goaleatorio/main.go

Go Alfabeto

Go Alfabeto Go Alfabeto é a versão em Go do zzalfabeto. Funções ZZ é um conjunto dos mais variados aplicativos, escritos em shell script, com as mais variadas aplicações. Dentre ele, o zzalfabeto, objeto deste estudo. O ZZAlfabeto Abaixo, temos a codificação original, do miniaplicativo. zzalfabeto () { zzzz -h alfabeto "$1" && return local char letra local coluna=1 local dados="\ A:Alpha:Apples:Ack:Ace:Apple:Able/Affirm:Able:Aveiro:Alan:Adam:.- B:Bravo:Butter:Beer:Beer:Beer:Baker:Baker:Bragança:Bobby:Boy:-... C:Charlie:Charlie:Charlie:Charlie:Charlie:Charlie:Charlie:Coimbra:Charlie:Charles:-.-. D:Delta:Duff:Don:Don:Dog:Dog:Dog:Dafundo:David:David:-.. E:Echo:Edward:Edward:Edward:Edward:Easy:Easy:Évora:Edward:Edward:. F:Foxtrot:Freddy:Freddie:Freddie:Freddy:Fox:Fox:Faro:Frederick:Frank:..-. G:Golf:George:Gee:George:George:George:George:Guarda:George:George:--. H:Hotel:Harry:Harry:Harry:Harry:How:How:Horta:Howard:Henry:.... I:India:Ink:Ink:Ink:In:Item/Interrogatory:Item:Itália:Isaac:Ida:.

pREST material de estudos

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Site do pREST https://postgres.rest goConfig https://github.com/crgimenes/goconfig tcp-port-wait https://github.com/nuveo/tcp-port-wait Funções ZZ http://funcoeszz.net/list.html Outros links mencionados Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

gofn Go1.9

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Test After Deploy https://www.youtube.com/c/testafterdeploy Meetup de Go na Totvs dia 30⁄08 https://www.meetup.com/pt-BR/golangbr/ Go 1.9 liberado https://blog.golang.org/go1.9 Release notes da versão 1.9 https://golang.org/doc/go1.9 Download da nova versão em https://golang.org/dl/ Outros links mencionados https://www.linuxcounter.net/cert/76132.png https://twitter.com/subfuzion/status/900875782448230400 https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/ https://github.com/rancher/rancher https://github.com/jwendell/fnkube https://devcenter.heroku.com/articles/container-registry-and-runtime Go Hands On: https://github.

Conhecendo seu ambiente

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Test After Deploy https://www.youtube.com/c/testafterdeploy Meetup de Go na Totvs dia 30⁄08 https://www.meetup.com/pt-BR/golangbr/ https://medium.com/@avelino0/conheça-seu-ambiente-de-trabalho-cf16f8cd555a http://onlywei.github.io/explain-git-with-d3/ https://webcache.googleusercontent.com/search?q=cache%3A7kX5VunbdlwJ%3Ahttps%3A%2F%2Fgithub.com%2Fmicrosoft%2Fvscode%2Fissues%2F32405+&cd=1&hl=en&ct=clnk&gl=de&client=firefox-b https://twitter.com/shanselman/status/898282514418081792 https://github.com/avelino/vim-bootstrap Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

lex

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://2017.gopherconbr.org/ https://github.com/bbalet/theary https://github.com/crgimenes/gosidekick https://github.com/crgimenes/lex https://github.com/geiltonxavier/aprenda-go https://github.com/prest/statements/blob/master/queries.go https://mailtrap.io/ https://www.youtube.com/c/testafterdeploy https://www.youtube.com/channel/UCZCoLtEGz3MdvxgFhbdZ-QA https://www.thoughtworks.com/pt/radar Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

vendor

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://www.facebook.com/permalink.php?story_fbid=1962033867157381&id=100000523594033&pnref=story https://www.youtube.com/c/TestAfterDeploy https://discordapp.com/ https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276 https://twitter.com/avelino0/status/892882581351526400 https://github.com/prest/prest/issues/190 https://gobyexample.com/rate-limiting http://minio.io/ http://rancher.com/ https://en.wikipedia.org/wiki/Fizz_buzz https://discordapp.com/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

context

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://github.com/prsolucoes/goci https://github.com/golang/go/issues/13080 https://golang.org/pkg/context/ http://pcoutinho.com/projetos/ https://github.com/gonum/gonum https://www.oreilly.com/ideas/data-science-gophers https://speakerdeck.com/rebeccaskinner/monadic-error-handling-in-go https://gist.github.com/marioidival/6b1c6086e8a846fbb286e630d333b35d https://github.com/d4l3k/go-pry https://github.com/gonum https://github.com/kniren/gota/ https://github.com/qingtiandalaoye/GoDataframe https://github.com/yanatan16/itertools https://github.com/wwg-poa/tutorial https://www.youtube.com/watch?v=5C1joxyjfk8 https://github.com/AsynkronIT/protoactor-go https://github.com/lizrice/strace-from-scratch Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras ás 22h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Testes Polimorfismo Otimização e muito mais

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://www.meetup.com/pt-BR/golangbr/ https://www.youtube.com/watch?v=gnTsHQEVoZE https://github.com/markbates/pop/tree/master/fizz https://github.com/crgimenes/gosidekick https://github.com/powerline/fonts/tree/master/3270 https://www.qt.io/developers/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

GopherCon Go2.0 e muito mais

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://github.com/dut-lang/dut https://github.com/dut-lang/unittest https://github.com/avelino/awesome-go#middlewares https://awesome-go.com/#middlewares https://github.com/tj/git-extras https://github.com/d4l3k/go-pry https://www.youtube.com/watch?v=PgAO4YhOsKw&t=1134s Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

editores map e muito mais

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: http://vim-bootstrap.com/ https://github.com/visualfc/liteide https://micro-editor.github.io/ https://github.com/zyedidia/micro https://github.com/golang/go/blob/master/src/sync/map.go https://twitter.com/fakalin/status/883115293299453952 https://tip.golang.org/doc/go1.9 https://github.com/avelino/cover.run https://github.com/zyedidia/micro https://micro-editor.github.io/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

testes e integração continua

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://github.com/nuveo/prest http://www.dci.com.br/opiniao/startup-cresce-com-ataque-a-burocracia-id634522.html http://crg.eti.br/post/Go-carregando-arquivos-Sped-Fiscal-super-rápido/ https://dementiagaming.files.wordpress.com/2010/08/learning_curve_of_eve.jpg https://danielkummer.github.io/git-flow-cheatsheet/ https://github.com/crgimenes/lpk https://github.com/go-br/estudos http://exercism.io http://rancher.com https://github.com/nuveo/gofn/blob/master/iaas/digitalocean/digitalocean_test.go https://github.com/kr/beanstalk/blob/master/tube_test.go https://golang.org/pkg/net/http/httptest/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

defer e close

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://joeshaw.org/dont-defer-close-on-writable-files/ https://www.xkcd.com/292/ https://www.youtube.com/watch?v=gnTsHQEVoZE https://goa.design https://petstore.swagger.io https://goswagger.io/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

switch gofn Roy

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://www.phacility.com/ https://github.com/nuveo/gofn https://github.com/nuveo/Roy Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

log

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://github.com/crgimenes/logSys https://github.com/sirupsen/logrus Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Valente WebSockets

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://github.com/trumae/valente http://nuveo.com.br/ https://github.com/novatrixtech/mercurius https://github.com/felipeweb https://vuejs.org/ https://github.com/alttagil/n2o https://nasa.github.io/openmct/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Machine Learning

Hangout do grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: https://en.wikipedia.org/wiki/Naive_Bayes_spam_filtering https://github.com/lytics/multibayes https://blog.golang.org/generate https://github.com/SlyMarbo/rss Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Prim's Algorithm

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: Minimum Spanning Tree, Prim’s Algorithm https://github.com/crgimenes/graphos/tree/master/mst http://github.com/hajimehoshi/ebiten https://github.com/crgimenes/graphos http://github.com/crgimenes/metal Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Canais slices e biblioteca gráfica Ebiten

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Links mencionados, alguns foram mencionados fora da gravação: http://github.com/hajimehoshi/ebiten http://github.com/crgimenes/metal Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Testes bug com C

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Participantes dessa semana: Armando Alves Camila Scatolini Cesar Gimenes Gilberto Jean Bueno Jonh Wendell José Carlos Ustra Júnio Mauro Mequelussi Links mencionados, alguns foram mencionados fora da gravação: https://github.com/golang/go/issues/19734 https://setemasters.imasters.com.br/edicoes/go/ Pagina no Facebook do grupo de estudos: https://www.facebook.com/gopher.pro.br/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.

goConfig godoc format

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Participantes dessa semana: Armando Alves Cesar Gimenes Gilmar Palega Jonh Wendell Mauro Mequelussi Ricardo Gomes Links mencionados, alguns foram mencionados fora da gravação: http://github.com/dgrijalva/jwt-go http://jinzhu.me/gorm http://cloudatcost.com Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

packages godoc goroutines canais

Hangout do nosso grupo de estudos de Golang. Um papo bem legal sobre a linguagem que a gente adora. Participantes dessa semana: Cesar Gimenes Gilberto Jean Holanda Junior Ricardo Gomes Rodrigo Campos Links mencionados, alguns foram mencionados fora da gravação: https://github.com/avelino/awesome-go#database https://github.com/chapzin/golang-web-dev https://github.com/chapzin/parse-efd-fiscal/blob/master/SpedExec/SpedExec.go https://github.com/chapzin/parse-efd-fiscal/ https://github.com/crgimenes/lpk https://novatec.com.br/livros/go-em-acao/ https://novatec.com.br/livros/linguagem-de-programacao-go/ https://www.infoq.com/br/presentations/go-em-producao-para-apis-e-microservices https://www.youtube.com/watch?v=gnTsHQEVoZE&t=124s Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.

smtp Enviando Email

smtp Enviando Email Com grande elegância e poucas linhas, golang através pacote net/smtp fornece as funções necessárias para disparo de e-mails. No exemplo abaixo podemos ver o uso do método SendMail em ação: package main import ( "log" "net/smtp" ) func main() { //Realiza o setup da autorização do servidor de SMTP. Não se esqueça de configuar seu Gmail SMTP server... //https://support.google.com/a/answer/176600?hl=en //https://support.google.com/accounts/answer/6010255?hl=en //Criamos um slice do tipo string do tamanho máximo de 1 para receber nosso e-mail destinatário.

Data Race

Data Race Data race é uma condição que ocorre quando duas threads tentam acessar a mesma area da memória ao mesmo tempo e pode causar vários problemas e resultados imprevisíveis. Felizmente Go vem completo com um detector de data race para testar seu código. Veja o exemplo abaixo: package main func main() { var x int go func() { x++ }() x++ } Nesse exemplo a variável x é acessada por dois pontos, um pela função main() e outro pela goroutine que criamos e para detectar o data race usamos o seguinte comando:

packages flag goConfig analisador léxico

Mais um divertido encontro do nosso grupo de estudos de Golang. Muitas ideias e projetos surgindo com o pessoal. Participantes dessa semana: Alejandro Mesias Holanda Junior Itacir Pompeu Joelson Lucas Silva Luis Vinicius Ricardo Gomes Rodrigo Savian Links mencionados, alguns foram mencionados fora da gravação: http://crg.eti.br https://github.com/crgimenes/lex https://github.com/crgimenes/goConfig https://github.com/chapzin/automatic-ftp-client http://scikit-learn.org/stable/ http://spark.apache.org/mllib/ http://www.nltk.org/ https://divan.github.io/posts/go_concurrency_visualize/ https://gobyexample.com/command-line-arguments https://golang.org/doc/faq#goroutines https://medium.com/@matryer/5-simple-tips-and-tricks-for-writing-unit-tests-in-golang-619653f90742 https://opennlp.apache.org/ Go Hands On: https://github.com/go-br/estudos Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.

gofn pREST goConfig e mais

Mais uma quinta-feira se batendo papo sobre nossa linguagem favorita. Essa semana falamos sobre vários softwares escritos em Go, veja alguns links que mencionamos. Materia sobre Golang no Mercado Livre: https://imasters.com.br/linguagens/o-ceu-e-o-limite-na-utilizacao-de-golang/?trace=1519021197&source=single Go Hands On: https://github.com/go-br/estudos goConfig: https://github.com/crgimenes/goConfig pREST: https://github.com/nuveo/prest gofn: https://github.com/nuveo/gofn Nossos encontros ocorrem todas as quintas-feiras as 20h00, para participar entre no canal de Go no slack https://invite.slack.golangbridge.org/ e procure por #brazilian-go-studies

Goroutines e canais

Toda semana um grupo de programadores se encontra para estudar Go, falar de tecnologia, rever código, projetos e jogar conversa fora. Para participar entre no canal #brazilian-go-studies em https://invite.slack.golangbridge.org/ estamos on-line toda quinta as 20h00. Essa semana falamos sobre Goroutines e canais. Alguns links do que comentamos… muita coisa foi dita na parte de bate papo depois da gravação mas os links estão aqui de qualquer forma :D

Plugins

Plugins A possibilidade de criar plugins é um novo recurso da versão 1.8 que por enquanto funciona apenas no Linux. Um plugin basicamente é uma biblioteca externa que pode ser carregada dinamicamente, o uso é bem simples. O mesmo recurso deve ser incluso no macOS na versão 1.9 e provavelmente em outras plataformas. Por enquanto para todos poderem experimentar sugerimos subir um container Docker. O comando abaixo abre um container Docker com uma maquina virtual pronta para executar a versão 1.

Testes

Testes Todo arquivo de testes deve ter o sufixo _test.go para o go test (ferramenta do go pra executar testes) enxergar o arquivo e suas funções devem ter a assinatura func Test...(t *testing.T) para serem consideradas testes. Exemplo Função a ser testada: package testing import ( "errors" ) var errDivisaoInvalida = errors.New("divisão invalida") func divideInteiros(dividendo, divisor int) (quociente int, resto int, err error) { if divisor == 0 { err = errDivisaoInvalida return } quociente = dividendo / divisor resto = dividendo % divisor return } Teste: func Test_divideInteiros(t *testing.

tcp Trabalhando com o protocolo tcp

tcp Trabalhando com o protocolo tcp Go através do pacote net provê interfaces de acesso a I/O, incluindo a pilha TCP/IP, UDP, resolução por nome de domínio e UNIX Sockets. Neste exemplo, iremos criar um cliente TCP/IP e um servidor TCP/IP. Servidor. O protocolo de comunicação que nosso servidor deverá trabalhar será este: - 1) Ouvir a interface tcp na porta 8081 - 2) Aceitar conexões - 3) Dentro de um loop infinito, ouvir as mensagens a serem transmitidas pelo cliente - 4) Escrever no terminal estas mensagens - 5) Devolver a mensagem recebida ao cliente (eco)

Reflection

Reflection Reflection permite obter informações sobre artefatos instanciados, é muito útil quando estamos trabalhando com interfaces. Exemplo: package main import ( "fmt" "reflect" ) type User struct { ID int `json:"id"` Name string `json:"name, omitempty"` Email string `json:"email, omitempty"` Password string `json:"password, omitempty"` } func main() { // Pegando metadados da struct por reflection var u User f := reflect.Indirect(reflect.ValueOf(u)) for i := 0; i < f.NumField(); i++ { fmt.

http Uso de Templates

http Uso de Templates Templates em Go são utilizados para gerar websites com conteúdo dinâmicos. Iremos neste exemplo, criar um webserver que irá manipular requisições web, apresentando um cabeçalho padrão e respondendo a solicitações de páginas html Para utilização de templates devemos importar o pacote html/template package main import ( "fmt" "net/http" "html/template" ) type Page struct { Name string } func main() { templates := template.Must(template.ParseFiles("templates/index.html")) http.HandleFunc("/", func(w http.

Funções

Funções Descreve o funcionamento de funções em Golang No Go não há metodos, só funções Retorno multiplo - Facilita a escrita e torna o código mais limpo Retorno assinado - Facilita a leitura do código Os parametros por padrão são passados por valor Utilizando ponteiros é possível passar valores por referencia package main import ( "fmt" ) // Retorno simples func soma(x int, y int) int { return x + y } // Retorno duplo func troca(x string, y string) (string, string) { return y, x } // Retorno assinado func divide(x, y int) (resultado, resto int) { // os dois retornos são inteiros nesse exemplo resto = x % y resultado = x / y return } // função que recebe uma função como parâmetro func executaFuncao(f func(string) string, valor string) { aux := f(valor) fmt.

Go com C

Go com C Go é ótimo mas as vezes é necessário usar alguma biblioteca de algum legado ou integrar com algum sistema embarcado que precisa de C para descer até o hardware. Felizmente é muito fácil integrar Go com C. Veja o exemplo: package main /* int sum(int a,int b) { return a+b; } */ import "C" import ( "fmt" ) func main() { r := C.sum(2, 2) fmt.Printf("sum(2,2) = %v\r\n", r) } Sim eu sei que é estranho mas é isso mesmo, você coloca seu código em C dentro de um comentário especial que deve vir exatamente na linha anterior a import “C”.

Goroutines

Goroutines Go tem um sistema de multitarefa leve e bastante poderoso e simples de usar. Basicamente você só precisa usar a clausula go na frente da função. Exemplo: go nomeDaRotina() No exemplo abaixo demostramos que Go termina todas as threads quando main termina. Para ver o efeito remova a linha com o timer dentro de main. package main import "time" func foo() { println("foo") } func main() { go foo() // experimente comentar a linha abaixo time.

Goroutines com WaitGroup

Goroutines com WaitGroup Para auxiliar no controle de diversos jobs simultâneos,independentes e ainda com resultados sincronizados podemos lançar mão da WaitGroup. A WaitGroup aguarda que um determinado número de goroutines sejam finalizadas para prosseguir com a execução. O programa principal faz a chamada para .Add() que recebe como parâmetro o número de goroutines que deve aguardar serem finalizadas. Exemplo: waitGroup.Add(3) No exemplo abaixo demostramos a chamada de três goroutines e a chamada para .

Olá Mundo

Olá Mundo Se tudo estiver certo já conseguimos rodar nosso primeiro programa. package main import "fmt" func main() { fmt.Printf("Olá Mundo!\r\n") } Playground Para rodar use o seguinte comando: go run ola_mundo.go Lembre! Você esta usando um compilador, compiladores alteram arquivos executáveis… antivirus não gostam que se altere arquivos executáveis e as vezes bloqueiam o compilador sem dar nenhum alerta. Desative seu antivirus antes de programar! Quando usamos o comando run, na verdade go compila o programa para um diretório temporario.

Pacotes

Pacotes Go é organizada em pacotes, os nomes dos pacotes fornecem um contexto e um espaço de nomes. import ( "fmt" ) O pacote rotateString criado para exemplificar vários conceitos. https://github.com/crgimenes/rotateString go get github.com/crgimenes/rotateString Referencia completa ao pacote direto no código. import ( "fmt" r "github.com/crgimenes/rotateString" ) Atualizar o pacote go get -u github.com/crgimenes/rotateString Exemplo de uso do pacote rotateString package main import ( "fmt" r "github.

Sinais

Sinais Tratar sinais é uma boa pratica, dessa forma você pode finalizar seu programa graciosamente, liberando recursos, fechando banco de dados, etc. muito melhor que simplesmente fechar o programa. E tratar sinais do sistema operacional com Go é muito simples porque basicamente o sistema vai jogar o sinal em uma canal e então precisamos apenas ficar escutando. Primeiro criamos um canal sc := make(chan os.Signal, 1) Daí informamos qual o tipo de sinal estamos interessados, no caso ^C ou seja SIGINT.

Struct

Struct Structs são coleções de campos. type Aluno struct { Nome string Idade int } Você também pode “decorar” sua declaração para tornar mais fácil converter para JSON por exemplo. type Localidade struct { X int `json:"valor_x"` Y int `json:"valor_y"` Nome string `json:"nome_da_localidade"` valor int // campo que inicia com letra minuscula é "private" } Você também pode adicionar etiquetas (tags) aos seus campos para gerar/ler arquivos JSON, para salvar/ler documentos do MongoDB, campos de banco de dados com sqlx.

Variáveis

Variáveis Go é fortemente tipada, isso significa que os tipos das variáveis são bem definidos e não podem mudar durante o programa. Tipos de variáveis em Go: bool string Varias formas de inteiro: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte na verdade é um alias para uint8 rune é um alias int32 e é usada para armazenar Unicode float32 float64 complex64 complex128 package main import ( "fmt" ) var ( // Declarando multiplas variáveis nome = "Cesar" idade = 42 url, path, query, page = "example.

defer

defer A clausula defer define que uma função deve ser chamada no fim da execução da rotina atual. Essa clausula é muito útil para por exemplo fechar arquivos abertos durante a execução da função. f, err := os.Open("filename.ext") if err != nil { log.Fatal(err) } defer f.Close() Mais um exemplo: package main import ( "fmt" ) func main() { defer func() { fmt.Printf("Fim da função main\r\n") }() for i := 0; i < 5; i++ { defer fmt.

error

error Go tem um sistema muito parecido com C de tratamento de erros. f, err := os.Open("filename.ext") if err != nil { panic(err) } Playground Podemos gerar nossos erros :smile:, usando o pacote nativo errors err := errors.New("Novo erro") Testando erros Quando estiver tratando erros não compare strings compare erros, a forma mais simples de fazer isso é instanciando uma variável para conter o erro no inicio package e usar essa instancia nas comparações e retornos.

for

for Go só tem uma forma de loop, o for, mas em Go for é muito flexível. package main import ( "fmt" ) func main() { valor := 0 for i := 0; i < 10; i++ { valor++ fmt.Printf("valor +1 = %v\r\n", valor) } for { valor-- fmt.Printf("valor -1 = %v\r\n", valor) if valor == 0 { break } } //Pode-se testar uma condicao, simulando o while(true) de outras linguagens teste := true for teste { fmt.

godoc

godoc Go tem uma ferramenta muito poderosa para visualizar documentação. Exemplos: godoc fmt godoc github.com/crgimenes/rotateString Você pode facilmente exportar a documentação em formato html: godoc -html github.com/crgimenes/rotateString > rotateString.html Ou ainda subir a documentação toda em um servidor html. godoc -http=:6060 Arquivos desse post: godoc/README.md

http

http Go vem com um conjunto enorme de bibliotecas padrão e mais milhares de bibliotecas criadas pela comunidade. Por exemplo para criar um servidor http basta o seguinte: package main import ( "io" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Olá mundo HTTP!") } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":9999", nil) } Servindo arquivos Esse é um exemplo bem simples de como servir arquivos. Nesse caso o diretório assets contem os arquivos que queremos servir.

http Uso do Get

http Uso do Get Dentro do pacote HTTP, Go fornece o método Get que permite facilmente sua utilização para consumo de requisições web. No exemplo abaixo podemos ver o uso do método Get para uma requisição de um determinado feed de noticias: package main import ( "fmt" "io/ioutil" "net/http" ) func main() { // Obtém o feed de rss através da url resp, err := http.Get("http://www.techworld.com/news/rss") if err != nil{ s := err.

interface

interface A interface básicamente é como se fosse um contrato as para funções que o recebem. Para implementar uma interface primeiro precisamos declarar-la: type Ser interface { Respirar() bool } Criando nossos tipos: type ( Humano struct {} Cachorro struct {} Pedra struct {} ) func (h Humano) Respirar() bool { return false } func (c Cachorro) Respirar() bool { return true } Agora criaremos uma função onde somente os Seres vivos podem recebidos:

net Listando Interfaces e IPs

net Listando Interfaces e IPs Um exemplo simples listando as interfaces de rede. package main import ( "fmt" "net" ) func main() { ifaces, _ := net.Interfaces() for _, i := range ifaces { fmt.Printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n") fmt.Printf("%v - %v\n", i.Name, i.HardwareAddr) addrs, err := i.Addrs() if err != nil { panic(err.Error()) } for _, a := range addrs { if ipnet, ok := a.(*net.IPNet); ok { if ipnet.IP.To4() != nil { fmt.

select

select Select trabalha junto com canais para esperar retornos de canais específicos. select { case msg1 := <-c1: fmt.Println("canal 1 retornou :", msg1) case msg2 := <-c2: fmt.Println("canal 2 retornou :", msg2) } Playground Arquivos desse post: select/README.md select/select.go

switch

switch Ao contrário das outras linguagens de programação em Go clausula switch não passa automaticamente para o próximo case, ao contrario é necessário usar fallthrough para que isso aconteça. É uma forma de evitar o esquecimento de colocar um break no fim de cada comando case. package main import ( "fmt" "runtime" "strconv" ) func main() { fmt.Print("UNIX box?\r\n") switch runtime.GOOS { case "darwin": fallthrough case "freebsd": fallthrough case "openbsd": fallthrough case "plan9": fmt.

time

time Go tem uma forma… peculiar de formatar datas, e é simplesmente terrível! Você usa uma data específica para formatar datas no lugar do tradicional “dd/MM/yyyy” você usa “02/01/2006” isso parece altamente ilógico… se você é americano você pode lembrar de uma sequencia simples como “01/02 03:04:05PM ‘06 -0700”, mas não é nada intuitivo para o resto do planeta. Fazer o que né tinha que ter um WTF! package main import ( "fmt" "time" ) func main() { t := time.

Expressões Regulares

Expressões Regulares Um exemplo simples usando o package regexp para extrair informação de um texto. package main import ( "fmt" "regexp" ) func main() { var conteudoHTML = `<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Titulo</title> </head> <body> <img src='imagem1.jpg'> <img src="imagem2.jpg"> </body> </html>` imagens := pegaImagens(conteudoHTML) for indice, valor := range imagens { fmt.Println(indice, valor) } } func pegaImagens(textoHTML string) (retorno []string) { encontraImagem := regexp.MustCompile(`<img[^>]+\bsrc=["']([^"']+)["']`) listaDeImagens := encontraImagem.FindAllStringSubmatch(textoHTML, -1) retorno = make([]string, len(listaDeImagens)) for i := range listaDeImagens { retorno[i] = listaDeImagens[i][1] } return } Playground

Integração com CPP

Integração com CPP Exemplo de como criar um package que faz wrap de uma classe CPP Arquivos desse post: cpp/README.md cpp/hello.cpp cpp/hello.go cpp/hello.hpp cpp/hello_test.go cpp/helloc.cpp cpp/helloc.h