Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go 1.8 plugins e outras novidades

Go 1.8 plugins e outras novidades

Demonstração e novo recurso da 1.8

Felipe Oliveira

February 16, 2017
Tweet

More Decks by Felipe Oliveira

Other Decks in Programming

Transcript

  1. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 1/12 Go

    1.8 plugins e outras novidades Demonstração e novo recurso da 1.8 16 February 2017 Felipe Paes de Oliveira Senior developer at Nuveo Cesar Gimenes Senior developer at Nuveo
  2. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 2/12 Ponto

    de vista O recuso de plugin é interessante mas da forma como esta não é util para todos, alguns projetos podem se bene ciar, mas no momento não é possível descarregar um plugin nem fazer alterações sem que o programa host também seja reiniciado.
  3. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 3/12 Pontos

    negativos Plugin não pode ser descarregado, falta uma função close. Quando um plugin é carregado ele ca cacheado e se tentar recarregar novamente o mesmo plugin sem reiniciar o host o sistema quebra. Só funciona no Linux. Mac e outras plataformas caram para a versão 1.9.
  4. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 4/12 Pontos

    positivos Fácil de implementar. Permite enviar código pré compilado para ser carregado sem requerer um deploy do sistema completo. Agora podemos modularizar nossos binários e carregar as funções em "lazy mode".
  5. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 5/12 Como

    implementar Cria um plugin é muito parecido com criar um programa normal não requer nenhuma estrutura diferenciada. Apenas compilar com o seguinte comando. go build -buildmode=plugin hello.go Isso vai gerar um arquivo plugin.so para gerar com um nome diferente use o parâmetro -o nome.so Exemplo de plugin: package main import "fmt" func Hello() error { fmt.Println("Hello, plugins!") return nil }
  6. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 6/12 Chamando

    funções via plugin Primeiro carregamos o arquivo .so var p *plugin.Plugin var err error p, err = plugin.Open("./plugin/plugin.so") if err != nil { fmt.Println(err) return }
  7. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 7/12 Chamando

    funções via plugin Em seguida carregamos os símbolos do arquivo (funções) var s plugin.Symbol s, err = p.Lookup("Hello") if err != nil { fmt.Println(err) return } Hello := s.(func() error)
  8. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 8/12 Chamando

    funções via plugin Por m podemos chamar a função como faríamos normalmente. err = Hello() if err != nil { fmt.Println(err) return } Mais exemplos de plugins (https://github.com/crgimenes/Go-Hands-On/tree/master/plugin)
  9. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 9/12 Outras

    coisas da 1.8 que queremos mencionar Tradicional melhoria no compilador HTTP1.1 lenta 0.5μs nas chamadas Agora o GOPATH tem valor default $HOME/go ou %USERPROFILE%/go O servidor HTTP agora tem um método "Shutdown(context) err" para parar o serviço graciosamente :D Você agora consegue atribuir uma struct diferente do tipo da variável desde que os campos das duas structs sejam iguais.
  10. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 10/12 Referencias

    Proposta dos plugins (https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ/mobilebasic) Lentidão do HTTP1.1 (https://github.com/golang/go/issues/18964) Load dinamico de plugin (mas sem o close a memoria continua alocada toda vez) (https://github.com/campoy/golang-plugins/)
  11. 3/4/2017 Go 1.8 plugins e outras novidades http://localhost:3999/Go1.8/Go1_8.slide#1 11/12 Thank

    you Felipe Paes de Oliveira Senior developer at Nuveo [email protected] (mailto:[email protected]) https://www.felipeweb.net.br (https://www.felipeweb.net.br) https://github.com/felipeweb (https://github.com/felipeweb) @_felipeweb (http://twitter.com/_felipeweb) Cesar Gimenes Senior developer at Nuveo [email protected] (mailto:[email protected]) http://crg.eti.br (http://crg.eti.br) http://github.com/crgimenes (http://github.com/crgimenes) @crgimenes (http://twitter.com/crgimenes) Material da palestra: https://github.com/crgimenes/talks/blob/master/Go1.8/ (https://github.com/crgimenes/talks/blob/master/Go1.8/)