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

4,248 views

Published on

2 Comments
7 Likes
Statistics
Notes
  • @Vitold S Это пакет http. Разумеется, можно всё что угодно сделать – в примере просто минимум.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Слайд 22: у меня вопрос, а что за объект http? Это экземпляр класса или функция или что это вообще? А что если я хочу два сервера на 80, 8080 портах. И на каждом порту со своим поведением я уже так сделать не смогу?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
4,248
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
29
Comments
2
Likes
7
Embeds 0
No embeds

No notes for slide

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

  1. 1. Go для python-программистов Константин Черкасов k.cherkasoff@gmail.com
  2. 2. Erlang?
  3. 3. Scala?
  4. 4. Scala + Akka?
  5. 5. Twisted? gevent? Tornado?
  6. 6. Компьютеры изменились • 2002 – Hyper-threading • 2005 – 2 cores • 2008 – 4 cores • 2010 – 8 cores • 2011 – 16 cores • 2013 – 4 cores in a phone :)
  7. 7. Зачем?
  8. 8. Big Data • 2005 – Data • 2010 – Data •2015 – Data Объем данных удваивается каждые 18 месяцев
  9. 9. Что с языками программирования? • С – 1972 Разработка ядра и окружения ОС, переносимость кода между различными архитектурами • С++ – 1980 Расширение возможностей C («C с классами») • Java – 1995 (работа начата в 1990) ПО для бытовых устройств, за основу взят C++
  10. 10. Что с языками программирования? • Perl – 1987 comp.sources.misc: «замена для awk и sed» • Python – 1991 (работа начата в 1989) Объектно-ориентированный скриптовый язык • Ruby – 1994 «Более объектно-ориентированный, чем Python» • Javascript – 1995 «язык для склеивания» веб-ресурсов, в том числе на стороне сервера
  11. 11. Go
  12. 12. Команда Go Rob Pike Robert GriesemerKen Thompson • Начали работу над Go в 2007 году • Практики с огромным опытом (Unix, Plan 9, Inferno, B, UTF-8, V8, JVM HotSpot) • Go задуман как инструмент для решения конкретных задач; это не академическое упражнение и не чья-то диссертация • http://golang.org/CONTRIBUTORS – 400 человек
  13. 13. Что такое Go • Компилируется в машинный код • Объектно-ориентированный • Есть понятие интерфейса • Нет классов • Автоматическое управление памятью, сборщик мусора • Императивный, с С-подобным синтаксисом
  14. 14. Что такое Go • Строгая статическая типизация • Нет неявного приведения типов • Утиная типизация и интерфейсы • Вывод типов • Развитые средства интроспекции • Поддержка Unicode ...
  15. 15. Что такое Go • Развитые средства функционального программирования: • 1st class functions • high order functions • function literals • closures • user-defined function types ...
  16. 16. Что такое Go • Встроенная поддержка конкурентного программирования: • Go-рутины • Инструкция go • Каналы и инструкция select
  17. 17. Что такое 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
  18. 18. Python vs Go
  19. 19. "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()
  20. 20. "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) }
  21. 21. array, slice a := [...]string{"один", "два", "три", "четыре", "пять"} Println(a) // [один два три четыре пять] Println(a[:2]) // [один два] Println(a[2:5]) // [три четыре пять]
  22. 22. map m := map[string]int{"один": 1, "два": 2, "три": 3} Println(m) // map[один:1 два:2 три:3] Println(m["один"], m["три"]) // 1 3 m["четыре"] = 4 Println(m["четыре"]) // 4
  23. 23. for ... range arr := [...]string{"один", "два", "три", "четыре", "пять"} for i, v := range arr { Println(i, v) }
  24. 24. Культурные шоки
  25. 25. В 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
  26. 26. В Go нет классов в привычном нам виде Go type Point struct { ! X float64 ! Y float64 } func (self Point) String() string { ! return fmt.Sprintf("(%f, %f)", self.X, self.Y) }
  27. 27. В 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)
  28. 28. В 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
  29. 29. В 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
  30. 30. Текущий статус Go • Активно развивается: март 2012 – Go 1.0, май 2013 – Go 1.1, июнь 2013 – Go 1.1.1 • Активное сообщество (G+, golang-nuts) • Подробная документация и учебники • Несколько книг, одна переведена на русский
  31. 31. Текущий статус Go • «Заряженная» стандартная библиотека • Множство сторонних библиотек, коннекторы для всего (БД, серверов очередей и т.п.) • Поддержка в Google App Engine
  32. 32. Текущий статус 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/
  33. 33. Области применения • Сетевые сервисы, распределенные вычисления • 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
  34. 34. Полезные ссылки • 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
  35. 35. Полезные ссылки • 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
  36. 36. Полезные ссылки • 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/
  37. 37. package main import "fmt" type Contact struct { ! email string ! skype string ! facebook string } func main() { ! c := Contact{ ! ! email: "k.cherkasoff@gmail.com", ! ! skype: "k.cherkasov", ! ! facebook: "http://fb.com/k.cherkasoff", ! } ! fmt.Println(c) }

×