SlideShare a Scribd company logo
1 of 40
Download to read offline
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 – 4 cores in a phone :)
Зачем?
Big Data
• 2005 – Data
• 2010 – Data
•2015 – Data
Объем данных удваивается каждые 18
месяцев
Что с языками
программирования?
• С – 1972
Разработка ядра и окружения ОС, переносимость
кода между различными архитектурами
• С++ – 1980
Расширение возможностей C («C с классами»)
• Java – 1995 (работа начата в 1990)
ПО для бытовых устройств, за основу взят C++
Что с языками
программирования?
• Perl – 1987
comp.sources.misc: «замена для awk и sed»
• Python – 1991 (работа начата в 1989)
Объектно-ориентированный скриптовый язык
• Ruby – 1994
«Более объектно-ориентированный, чем Python»
• Javascript – 1995
«язык для склеивания» веб-ресурсов, в том числе
на стороне сервера
Go
Команда Go
Rob Pike Robert GriesemerKen Thompson
• Начали работу над Go в 2007 году
• Практики с огромным опытом (Unix, Plan 9, Inferno, B,
UTF-8, V8, JVM HotSpot)
• Go задуман как инструмент для решения конкретных
задач; это не академическое упражнение и не чья-то
диссертация
• http://golang.org/CONTRIBUTORS – 400 человек
Что такое Go
• Компилируется в машинный код
• Объектно-ориентированный
• Есть понятие интерфейса
• Нет классов
• Автоматическое управление памятью,
сборщик мусора
• Императивный, с С-подобным синтаксисом
Что такое Go
• Строгая статическая типизация
• Нет неявного приведения типов
• Утиная типизация и интерфейсы
• Вывод типов
• Развитые средства интроспекции
• Поддержка Unicode
...
Что такое Go
• Развитые средства функционального
программирования:
• 1st class functions
• high order functions
• function literals
• closures
• user-defined function types
...
Что такое Go
• Встроенная поддержка конкурентного
программирования:
• Go-рутины
• Инструкция go
• Каналы и инструкция select
Что такое 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
Python vs Go
"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()
"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)
}
array, slice
a := [...]string{"один", "два", "три", "четыре", "пять"}
Println(a) // [один два три четыре пять]
Println(a[:2]) // [один два]
Println(a[2:5]) // [три четыре пять]
map
m := map[string]int{"один": 1, "два": 2, "три": 3}
Println(m) // map[один:1 два:2 три:3]
Println(m["один"], m["три"]) // 1 3
m["четыре"] = 4
Println(m["четыре"]) // 4
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 __str__(self):
! ! return "(%f, %f)"%(self.X, self.Y)
Python
В Go нет классов
в привычном нам виде
Go
type Point struct {
! X float64
! Y float64
}
func (self Point) String() string {
! return fmt.Sprintf("(%f, %f)", self.X, self.Y)
}
В 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)
В 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
В 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
Текущий статус Go
• Активно развивается: март 2012 – Go 1.0, май
2013 – Go 1.1, июнь 2013 – Go 1.1.1
• Активное сообщество (G+, golang-nuts)
• Подробная документация и учебники
• Несколько книг, одна переведена на русский
Текущий статус Go
• «Заряженная» стандартная библиотека
• Множство сторонних библиотек, коннекторы
для всего (БД, серверов очередей и т.п.)
• Поддержка в Google App Engine
Текущий статус 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/
Области применения
• Сетевые сервисы, распределенные
вычисления
• 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
Полезные ссылки
• 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
Полезные ссылки
• 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
Полезные ссылки
• 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/
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)
}

More Related Content

What's hot

Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2Computer Science Club
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаPython Meetup
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — LuaYury Yurevich
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo Development
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Platonov Sergey
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Ontico
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 

What's hot (20)

Go
GoGo
Go
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — Lua
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
DLR Hosting
DLR HostingDLR Hosting
DLR Hosting
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Presentation
PresentationPresentation
Presentation
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 

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

Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodNikita Baksalyar
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Nikita Baksalyar
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014it-people
 
Git и GitHub для создания учебного контента
Git и GitHub для создания учебного контентаGit и GitHub для создания учебного контента
Git и GitHub для создания учебного контентаПупена Александр
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
 
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Moscow.pm
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circlewebriders
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Ontico
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 

Similar to Go для python-программистов (20)

Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Golang
GolangGolang
Golang
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
 
Git и GitHub для создания учебного контента
Git и GitHub для создания учебного контентаGit и GitHub для создания учебного контента
Git и GitHub для создания учебного контента
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
ETL на Python
ETL на PythonETL на Python
ETL на Python
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circle
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Erlang
ErlangErlang
Erlang
 

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

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