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

Язык Go для python-программистов

Язык Go для python-программистов

Константин Черкасов (КМ Медиа)

Go — язык программирования, который стремительно набирает популярность. Быстрый, компилируемый в нативный код, со встроенной поддержкой конкурентного программирования и "заряженной" стандартной библиотекой. Go обладает простотой и выразительностью, которые так ценят python-программисты. Я расскажу почему стоит изучать и использовать Go, и покажу на примерах, насколько это просто для тех, кто уже знает Python.

Moscow Python Meetup

July 26, 2013
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Компьютеры изменились • 2002 – Hyper-threading • 2005 – 2

    cores • 2008 – 4 cores • 2010 – 8 cores • 2011 – 16 cores • 2013 – 4 cores in a phone :)
  2. Big Data • 2005 – Data • 2010 – Data

    •2015 – Data Объем данных удваивается каждые 18 месяцев
  3. Что с языками программирования? • С – 1972 Разработка ядра

    и окружения ОС, переносимость кода между различными архитектурами • С++ – 1980 Расширение возможностей C («C с классами») • Java – 1995 (работа начата в 1990) ПО для бытовых устройств, за основу взят C++
  4. Что с языками программирования? • Perl – 1987 comp.sources.misc: «замена

    для awk и sed» • Python – 1991 (работа начата в 1989) Объектно-ориентированный скриптовый язык • Ruby – 1994 «Более объектно-ориентированный, чем Python» • Javascript – 1995 «язык для склеивания» веб-ресурсов, в том числе на стороне сервера
  5. Go

  6. Команда Go Rob Pike Robert Griesemer Ken Thompson • Начали

    работу над Go в 2007 году • Практики с огромным опытом (Unix, Plan 9, Inferno, B, UTF-8, V8, JVM HotSpot) • Go задуман как инструмент для решения конкретных задач; это не академическое упражнение и не чья-то диссертация • http://golang.org/CONTRIBUTORS – 400 человек
  7. Что такое Go • Компилируется в машинный код • Объектно-ориентированный

    • Есть понятие интерфейса • Нет классов • Автоматическое управление памятью, сборщик мусора • Императивный, с С-подобным синтаксисом
  8. Что такое Go • Строгая статическая типизация • Нет неявного

    приведения типов • Утиная типизация и интерфейсы • Вывод типов • Развитые средства интроспекции • Поддержка Unicode ...
  9. Что такое Go • Развитые средства функционального программирования: • 1st

    class functions • high order functions • function literals • closures • user-defined function types ...
  10. Что такое Go func main() { ! go boring("boring!") !

    fmt.Println("I'm listening") ! time.Sleep(2 * time.Second) ! fmt.Println("You're boring; I'm leaving.") } func boring(msg string) { ! for i := 0; ; i++ { ! ! fmt.Println(msg, i) ! ! time.Sleep(1 * time.Second) ! } } Go Concurrency Patterns youtu.be/f6kdp27TYZs
  11. "Hello, world" на Tornado import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler):

    def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
  12. "Hello, world" на Go package main import "net/http" func MainHandler(resp

    http.ResponseWriter, _ *http.Request) { ! resp.Write([]byte("Hello, world!")) } func main() { ! http.HandleFunc("/", MainHandler) ! http.ListenAndServe(":8080", nil) }
  13. array, slice a := [...]string{"один", "два", "три", "четыре", "пять"} Println(a)

    // [один два три четыре пять] Println(a[:2]) // [один два] Println(a[2:5]) // [три четыре пять]
  14. map m := map[string]int{"один": 1, "два": 2, "три": 3} Println(m)

    // map[один:1 два:2 три:3] Println(m["один"], m["три"]) // 1 3 m["четыре"] = 4 Println(m["четыре"]) // 4
  15. В Go нет классов в привычном нам виде class Point(object):

    ! def __init__(self, X, Y): ! ! self.X = X ! ! self.Y = Y ! def __str__(self): ! ! return "(%f, %f)"%(self.X, self.Y) Python
  16. В Go нет классов в привычном нам виде Go type

    Point struct { ! X float64 ! Y float64 } func (self Point) String() string { ! return fmt.Sprintf("(%f, %f)", self.X, self.Y) }
  17. В Go нет классов в привычном нам виде Go type

    Point struct { ! X float64 ! Y float64 } func (self Point) String() string { ! return fmt.Sprintf("(%f, %f)", self.X, self.Y) } def __str__(self)
  18. В Go нет исключений в привычном нам виде file, err

    := os.Open("filename.ext") if err != nil { log.Fatal(err) } // do something with the open *File f «Ошибка» – это альтернативный результат Error Handling and Go http://golang.org/doc/articles/error_handling.html
  19. В Go нет исключений в привычном нам виде Для аварий

    – panic & recover func g(i int) { if i > 3 { panic(fmt.Sprintf("Too large: %v", i)) } Defer, Panic, and Recover http://golang.org/doc/articles/defer_panic_recover.html
  20. Текущий статус Go • Активно развивается: март 2012 – Go

    1.0, май 2013 – Go 1.1, июнь 2013 – Go 1.1.1 • Активное сообщество (G+, golang-nuts) • Подробная документация и учебники • Несколько книг, одна переведена на русский
  21. Текущий статус Go • «Заряженная» стандартная библиотека • Множство сторонних

    библиотек, коннекторы для всего (БД, серверов очередей и т.п.) • Поддержка в Google App Engine
  22. Текущий статус Go • Gorilla web toolkit http://www.gorillatoolkit.org/ • Beego

    Beego is a Go Framework which is inspired from tornado and sinatra https://github.com/astaxie/beego • Revel A high productivity web framework for the Go language, in the spirit of Rails and Play! http://robfig.github.io/revel/
  23. Области применения • Сетевые сервисы, распределенные вычисления • Go most

    watched repositories https://github.com/languages/Go/most_watched • A list of Go projects https://code.google.com/p/go-wiki/wiki/Projects
  24. Полезные ссылки • Go Concurrency Patterns http://youtu.be/f6kdp27TYZs • Advanced Go

    Concurrency Patterns http://youtu.be/QDDwwePbDtw • Concurrency Is Not Parallelism http://vimeo.com/49718712 • Meet the Go Team http://youtu.be/sln-gJaURzk • Fireside Chat with the Go Team http://youtu.be/p9VUCp98ay4
  25. Полезные ссылки • What Python developers need to know before

    migrating to Go http://blog.repustate.com/migrating-code-from-python-to-golang-what-you- need-to-know/2013/04/23/ • Parallelism For The Win! http://areyoufuckingcoding.me/2012/08/16/parallelism-for-the-win/ • Rethinking Errors: Learning from Scala and Go http://youtu.be/REOL1AV_PCg
  26. Полезные ссылки • Why Python, Ruby and Javascript are Slow

    https://vimeo.com/61044810 • Scala Actors 101 - Threadless and Scalable http://java.dzone.com/articles/scala-threadless-concurrent • Concurrency in Erlang & Scala: The Actor Model http://savanne.be/articles/concurrency-in-erlang-scala/
  27. package main import "fmt" type Contact struct { ! email

    string ! skype string ! facebook string } func main() { ! c := Contact{ ! ! email: "[email protected]", ! ! skype: "k.cherkasov", ! ! facebook: "http://fb.com/k.cherkasoff", ! } ! fmt.Println(c) }