Your SlideShare is downloading. ×
0
Go
для python-программистов
Константин Черкасов
k.cherkasoff@gmail.com
Erlang?
Scala?
Scala + Akka?
Twisted?
gevent?
Tornado?
Компьютеры
изменились
• 2002 – Hyper-threading
• 2005 – 2 cores
• 2008 – 4 cores
• 2010 – 8 cores
• 2011 – 16 cores
• 2013...
Зачем?
Big Data
• 2005 – Data
• 2010 – Data
•2015 – Data
Объем данных удваивается каждые 18
месяцев
Что с языками
программирования?
• С – 1972
Разработка ядра и окружения ОС, переносимость
кода между различными архитектура...
Что с языками
программирования?
• Perl – 1987
comp.sources.misc: «замена для awk и sed»
• Python – 1991 (работа начата в 1...
Go
Команда Go
Rob Pike Robert GriesemerKen Thompson
• Начали работу над Go в 2007 году
• Практики с огромным опытом (Unix, Pl...
Что такое Go
• Компилируется в машинный код
• Объектно-ориентированный
• Есть понятие интерфейса
• Нет классов
• Автоматич...
Что такое Go
• Строгая статическая типизация
• Нет неявного приведения типов
• Утиная типизация и интерфейсы
• Вывод типов...
Что такое Go
• Развитые средства функционального
программирования:
• 1st class functions
• high order functions
• function...
Что такое Go
• Встроенная поддержка конкурентного
программирования:
• Go-рутины
• Инструкция go
• Каналы и инструкция sele...
Что такое Go
func main() {
! go boring("boring!")
! fmt.Println("I'm listening")
! time.Sleep(2 * time.Second)
! fmt.Print...
Python vs Go
"Hello, world" на Tornado
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(...
"Hello, world" на Go
package main
import "net/http"
func MainHandler(resp http.ResponseWriter, _ *http.Request) {
! resp.W...
array, slice
a := [...]string{"один", "два", "три", "четыре", "пять"}
Println(a) // [один два три четыре пять]
Println(a[:...
map
m := map[string]int{"один": 1, "два": 2, "три": 3}
Println(m) // map[один:1 два:2 три:3]
Println(m["один"], m["три"]) ...
for ... range
arr := [...]string{"один", "два", "три",
"четыре", "пять"}
for i, v := range arr {
Println(i, v)
}
Культурные шоки
В Go нет классов
в привычном нам виде
class Point(object):
! def __init__(self, X, Y):
! ! self.X = X
! ! self.Y = Y
! def...
В Go нет классов
в привычном нам виде
Go
type Point struct {
! X float64
! Y float64
}
func (self Point) String() string {...
В Go нет классов
в привычном нам виде
Go
type Point struct {
! X float64
! Y float64
}
func (self Point) String() string {...
В Go нет исключений
в привычном нам виде
file, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
// do somet...
В Go нет исключений
в привычном нам виде
Для аварий – panic & recover
func g(i int) {
if i > 3 {
panic(fmt.Sprintf("Too la...
Текущий статус Go
• Активно развивается: март 2012 – Go 1.0, май
2013 – Go 1.1, июнь 2013 – Go 1.1.1
• Активное сообщество...
Текущий статус Go
• «Заряженная» стандартная библиотека
• Множство сторонних библиотек, коннекторы
для всего (БД, серверов...
Текущий статус Go
• Gorilla web toolkit
http://www.gorillatoolkit.org/
• Beego
Beego is a Go Framework which is inspired f...
Области применения
• Сетевые сервисы, распределенные
вычисления
• Go most watched repositories
https://github.com/language...
Полезные ссылки
• Go Concurrency Patterns
http://youtu.be/f6kdp27TYZs
• Advanced Go Concurrency Patterns
http://youtu.be/Q...
Полезные ссылки
• What Python developers need to know before
migrating to Go
http://blog.repustate.com/migrating-code-from...
Полезные ссылки
• Why Python, Ruby and Javascript are Slow
https://vimeo.com/61044810
• Scala Actors 101 - Threadless and ...
package main
import "fmt"
type Contact struct {
! email string
! skype string
! facebook string
}
func main() {
! c := Con...
Go для python-программистов
Go для python-программистов
Go для python-программистов
Upcoming SlideShare
Loading in...5
×

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

2,221

Published on

2 Comments
6 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
2,221
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
21
Comments
2
Likes
6
Embeds 0
No embeds

No notes for slide

Transcript of "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) }
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×