Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Go meetup 2015 04-23

30,805 views

Published on

Go в Спутник.Картах

Published in: Technology

Go meetup 2015 04-23

  1. 1. Go в Спутник.Картах В бою
  2. 2. Go в Спутник.Картах В бою
  3. 3. Тайловый бэкенд Gopnik =)
  4. 4. Тайловый бэкенд - Карта состоит из тайлов
  5. 5. Тайловый бэкенд
  6. 6. Тайловый бэкенд - Карта состоит из тайлов - Используются различные источники данных
  7. 7. Тайловый бэкенд
  8. 8. Тайловый бэкенд - Карта состоит из тайлов - Используются различные источники данных - Используется специализированная библиотека Mapnik (написана на C++) - Генерация тайлов занимает существенное время
  9. 9. Тайловый бэкенд - Часть тайлов генерируется заранее в пакетном режиме - Часть - по требованию
  10. 10. Тайловый бэкенд
  11. 11. Open Source http://sputnik-maps.github.io/
  12. 12. Поиск объектов реального мира
  13. 13. Особенности :-) - Учитывает особенности строения адресного пространства (вложенность объектов) - “Угадывает мысли” (учитывает подразумеваемый контекст) - Различает “близко” и “далеко”, “большой” и “маленький”
  14. 14. Особенности :-( - Много деталей, специфичных только для России
  15. 15. Обратный геокодер - Преобразует координаты в адрес - Используется порт библиотеки S2 https://github.com/golang/geo
  16. 16. Архитектура
  17. 17. Архитектура - Относительно небольшая коллекция данных (входит в оперативную память) - Компоненты – простые веб-сервисы - MVC-like (✿◠‿◠)
  18. 18. Что нам дает Go
  19. 19. Что нам дает Go - Скорость разработки - Простота обучения - Тестируемый код
  20. 20. Что нам дает Go - Скорость выполнения - Скорость компиляции - Стандартная библиотека - Tools gofmt, gorename, cover, pprof, expvar gotype, golint, vet, errcheck
  21. 21. Трудности (╯°□°)╯︵ ┻━┻
  22. 22. Gob - gob http://blog.golang.org/gobs-of-data http://golang.org/pkg/encoding/gob - не быстрый - const tooBig = 1 << 30
  23. 23. Сторонние библиотеки :-( - писать биндинги С++ ↔ Go непросто - segfault безжалостен :-) - изолированные процессы - RPC
  24. 24. Данные в памяти и GC - Хранишь миллионы объектов – GC придет за тобой - длительность stop-the-world пропорциональна количеству указателей в heap
  25. 25. Данные в памяти и GC
  26. 26. Данные в памяти и GC Где прячутся указатели - указатели - мапы - слайсы - строки - интерфейсы - ...
  27. 27. Данные в памяти и GC Как уменьшить длительность stop-the-world - индекс массива вместо указателей - строки положить в один большой []byte type PString struct { Offset: uint32 Lenghth: uint32 }
  28. 28. Данные в памяти и GC Как уменьшить длительность stop-the-world - mmap - генерация кода с константами var data = map[string]int{ "a":1, "b":2, ...
  29. 29. package main import "fmt" func main() { c := []struct { name string email string }{ { name: "Константин Черкасов", email: "k.cherkasoff@gmail.com", }, { name: "Максим Дементьев", email: "max@orofarne.ru", }, } fmt.Println(c) }

×