SlideShare a Scribd company logo
To Go или не to Go 
Иван Зезюля 
Al Digit 
http://zoid.cc
Немного истории 
• 2007 – идея о новом языке 
• 2008 – прототип внутри Google 
• 2009 – первый публичный релиз 
• 2012 – 1.0 
• 2014, июнь – 1.3
Создатели 
• Ken Thompson – UNIX, regexp 
• Rob Pike – UNIX, UTF-8 
• Robert Griesemer – V8 
• Russ Cox 
• Ian Taylor
Изначальные цели 
• эффективная разработка больших программ 
• скорость компиляции 
• распределенные системы 
• многопоточность, работа с сетью
Основные фишки
Статическая типизация 
С автоматическим выводом типов: 
x := 1 + 2 // int 
y := 2.0 * 21.0 // float 
Это эквивалентно: 
var x int = 1 + 2 
var y float32 = 2.0 * 21.0
Компиляция в нативный 
код 
• Никаких JIT’ов и интерпретаторов 
• Платформы: x86, x86-64, ARM (Linux)
Легковесные потоки 
(goroutines) 
func work(data int) { 
fmt.Println(“trrr") 
time.Sleep(100 * time.Millisecond) 
} 
! 
for i := 1; i < 5; i++ { 
go work(i) 
}
Каналы (channels) 
func sum(values []int, out chan int) { 
sum := 0 
for _, value := range values { 
sum += value 
} 
out <- sum 
} 
! 
values := []int{7, 2, 8, -9, 4, 0} 
channel := make(chan int) 
! 
go sum(values[:len(values)/2], channel) 
go sum(values[len(values)/2:], channel) 
! 
x, y := <-channel, <-channel
Интерфейсы 
type Reader interface { 
Read(p []byte) (n int, err error) 
} 
Любой тип, который реализует такой метод 
Read — является Reader’ом
GC 
• Неотключаемый
Простота и минимализм 
Количество ключевых слов: 
C (K&R) 32 
C++ (1991) 48 
Java (3rd ed.) 50 
C# 77 
C++0x 72+11 
JavaScript 26+16 
Python (2.7) 31 
Pascal 35 
Oberon 32 
Go 25
Плюшки 
• Множественные возвращаемые значения 
• go fmt 
• import "github.com/go-martini/martini" 
• Строгая система типов (нет неявных 
преобразований) 
• Весьма хорошая стандартная библиотека 
• Слайсы
Кто использует Go 
• Docker, в т.ч. в составе Yandex.Cocaine 
• Dropbox (“major parts of infrastructure”) 
• Canonical 
• Heroku (Doozer data store) 
• BBC World News 
• AirBrake (crash reporting) 
• SoundCloud 
• Google :)

More Related Content

PDF
To Go или не to Go
PDF
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
PDF
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
PDF
Reform: путь к лучшему ORM
PDF
PDF
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
To Go или не to Go
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Reform: путь к лучшему ORM
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)

What's hot (19)

PDF
C++Now Trip Report
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
ODP
обслуживание мультисайтинга
ODP
Правильная работа с часовыми поясами в Rails приложении — DevConf 2015
PDF
Reactive programming для успеха вашего стартапа
PDF
Clojure – есть ли жизнь после Java
PDF
Практическое применение роботов при захвате мира
PDF
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
PDF
PDF
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
PDF
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
PPTX
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
PDF
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
PDF
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
PPTX
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
PDF
Введение в потоки питона
C++Now Trip Report
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
обслуживание мультисайтинга
Правильная работа с часовыми поясами в Rails приложении — DevConf 2015
Reactive programming для успеха вашего стартапа
Clojure – есть ли жизнь после Java
Практическое применение роботов при захвате мира
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
Введение в потоки питона
Ad

Similar to 2014-11-01 02 Иван Зезюля. To go или не to go (17)

PDF
Something about Golang
PDF
Go для python-программистов
PDF
Язык программирования Go для Perl-программистов
PDF
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
PDF
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
PDF
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
PDF
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
PPT
язык программирования Go
ODP
implementation of 'go'-like language constructions in scala (russian)
PPTX
Зачем нужен Go?
PDF
Rust: абстракции и безопасность, совершенно бесплатно
PDF
Консольные приложения на Go
PDF
PDF
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
PPTX
неприятная правда про язык go
PDF
Семь тысяч Rps, один go
PDF
Swift School #2
Something about Golang
Go для python-программистов
Язык программирования Go для Perl-программистов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
язык программирования Go
implementation of 'go'-like language constructions in scala (russian)
Зачем нужен Go?
Rust: абстракции и безопасность, совершенно бесплатно
Консольные приложения на Go
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
неприятная правда про язык go
Семь тысяч Rps, один go
Swift School #2
Ad

More from Омские ИТ-субботники (20)

PDF
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
PDF
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
PDF
2017-05-06 02 Илья Сиганов. Зачем учить машины?
PDF
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
PDF
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
PDF
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
PDF
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
PDF
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
PDF
2017-02-04 02 Яков Лило. Решение задач
PDF
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
PDF
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
PDF
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
PDF
2016-12-03 03 Евгений Тюменцев. DSL на коленке
PDF
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
PDF
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
PDF
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
PDF
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
PDF
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
PDF
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
PDF
2016-09-17 03 Василий Полозов. WebRTC
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 02 Яков Лило. Решение задач
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
2016-09-17 03 Василий Полозов. WebRTC

2014-11-01 02 Иван Зезюля. To go или не to go

  • 1. To Go или не to Go Иван Зезюля Al Digit http://zoid.cc
  • 2. Немного истории • 2007 – идея о новом языке • 2008 – прототип внутри Google • 2009 – первый публичный релиз • 2012 – 1.0 • 2014, июнь – 1.3
  • 3. Создатели • Ken Thompson – UNIX, regexp • Rob Pike – UNIX, UTF-8 • Robert Griesemer – V8 • Russ Cox • Ian Taylor
  • 4. Изначальные цели • эффективная разработка больших программ • скорость компиляции • распределенные системы • многопоточность, работа с сетью
  • 6. Статическая типизация С автоматическим выводом типов: x := 1 + 2 // int y := 2.0 * 21.0 // float Это эквивалентно: var x int = 1 + 2 var y float32 = 2.0 * 21.0
  • 7. Компиляция в нативный код • Никаких JIT’ов и интерпретаторов • Платформы: x86, x86-64, ARM (Linux)
  • 8. Легковесные потоки (goroutines) func work(data int) { fmt.Println(“trrr") time.Sleep(100 * time.Millisecond) } ! for i := 1; i < 5; i++ { go work(i) }
  • 9. Каналы (channels) func sum(values []int, out chan int) { sum := 0 for _, value := range values { sum += value } out <- sum } ! values := []int{7, 2, 8, -9, 4, 0} channel := make(chan int) ! go sum(values[:len(values)/2], channel) go sum(values[len(values)/2:], channel) ! x, y := <-channel, <-channel
  • 10. Интерфейсы type Reader interface { Read(p []byte) (n int, err error) } Любой тип, который реализует такой метод Read — является Reader’ом
  • 12. Простота и минимализм Количество ключевых слов: C (K&R) 32 C++ (1991) 48 Java (3rd ed.) 50 C# 77 C++0x 72+11 JavaScript 26+16 Python (2.7) 31 Pascal 35 Oberon 32 Go 25
  • 13. Плюшки • Множественные возвращаемые значения • go fmt • import "github.com/go-martini/martini" • Строгая система типов (нет неявных преобразований) • Весьма хорошая стандартная библиотека • Слайсы
  • 14. Кто использует Go • Docker, в т.ч. в составе Yandex.Cocaine • Dropbox (“major parts of infrastructure”) • Canonical • Heroku (Doozer data store) • BBC World News • AirBrake (crash reporting) • SoundCloud • Google :)