Skip to content

Instantly share code, notes, and snippets.

@lucasp90
Created June 5, 2017 04:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucasp90/e9162fe9c5cc9c3a001af89f5a77e005 to your computer and use it in GitHub Desktop.
Save lucasp90/e9162fe9c5cc9c3a001af89f5a77e005 to your computer and use it in GitHub Desktop.
Meetup #6 GolangAR

Meetup Go

  • golangar.com.ar
  • golangweekly

Code that grows with grace: Chat a la chatroulette en Go

  • Francesc Campoy (Google SF)
    • JustForFunc (Youtube)
    • gcppodcast.com

Go

  • Documentación antes que código
  • Cross-compilation
  • Garbage collection
  • stdlib muy minimal
  • Sin clases sin herencia ni interfaces se satisface implicitamente (smalltalk like?) -> leer mas sobre esto!!
  • Concurrencia al estilo de CSP (Dijkstra)
  • Goroutines (threads). Channels (comunicación inter-routines). Las rutinas manejan memoria (pueden leakear)
  • Go tambien tiene mutexes y threads, aparte de los channels.]

Networking

  • Go se hizo para comunicación entre servers. (paquete net)

TCP

  • Accept es bloqueante (como en los sockets de C)
    • Necesitamos threads (Goroutines)
    • Sólo hay que agregar go al método y lo tenemos concurrente :O :O

HTTP (Websockets)

  • Similar a los tcp
  • Se recibe un handler (funcion) para poder usar el modulo http.

Struct embedding

  • Se tiene un tipo A con métodos
  • Se tiene otro tipo B con un tipo embebido
  • El tipo B tiene declarados impícitamente los métodos del tipo A
  • Se puede definir qué métodos exponer. (!!)

Channels

  • <- Envio a canales.
  • No necesariamente son async
  • select elige sobre operaciones en canales.
  • En caso de operaciones que coincidan en su "prioridad" de ejecucion, se ejecutan aleatoriamente (se puede definir que implementar)
  • Se puede conectar tcp y websockets

Golang ya!!

  • (@caco_patane)

Ideas:

  • lib + cli + API + tests
  • API Mocks
  • Port de APIs
  • Scraper/crawler
  • Procesar archivos por lotes

Garbage Collector en Go

  • Gustavo Rodríguez (ML)

  • El cambio de 1.7 a 1.8 trajo mejoras en los tiempos de pausa del Garbage Collector (10 microsegundos)

  • Hasta 1.4: Mark and sweep. Pausa el proceso, identifica lo accesible y libera lo demás. El problema: lento y fragmenta el heap

  • 1.5: Throughput vs latencia - algoritmo tricolor (Dijkstra) sobre los objetos involucrados en el proceso.

    • Problemas: las referencias cambian en el ciclo de vida del proceso y el seguimiento puede quedar inconsistente. Para esto, el GC actúa ante cada cambio de referencia para mantener el seguimiento en un estado válido.
  • 1.6 Mejora en el algoritmo de GC, pero se nota en programas que manejan mucha memoria

  • 1.7 Mejora en goroutines

  • 1.8 Mejora descripta arriba

  • 1.9 Parece que van a usar algoritmos generacionales para mejorar el GC (lo que usa OCaml para no chequear tooodo el heap de una)

Eliminate SWT stack re-scanning - Austin Clements, Rick Hudson Fisher - Sewell: Golang's Realtime GC gc-latency-experiment

Boltdb: KVStore database en Go

Github: ckuroki

  • 100% KV NoSQL
  • 100% Go
  • No depende de un servicio, sino que está embebida en el programa (onda SQLite)

Funcionamiento

  • 1 db es un archivo (estándar .db)
  • B* tree
  • n buckets (asociados a entidades?)
  • Las keys no se repiten en los buckets
  • Transaccional, impactando en múltiples buckets de manera atómica
  • Permite una sola transacción de escritura a la vez y varias de lectura
  • Se puede usar para apps mobile (!!!)

Dockerfile minimalista para Go

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment