SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
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 :)

Contenu connexe

Tendances

Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Platonov Sergey
 
Stop whining and make a cross-platform game already!
Stop whining and make a  cross-platform game already!Stop whining and make a  cross-platform game already!
Stop whining and make a cross-platform game already!DevGAMM Conference
 
C++Now Trip Report
C++Now Trip ReportC++Now Trip Report
C++Now Trip Reportcorehard_by
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Ontico
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Ontico
 
CodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игр
CodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игрCodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игр
CodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игрCodeFest
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусеArtem Kovardin
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Взаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и ErlangВзаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и ErlangDevDay
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"Fwdays
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеit-people
 

Tendances (19)

Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»
 
Stop whining and make a cross-platform game already!
Stop whining and make a  cross-platform game already!Stop whining and make a  cross-platform game already!
Stop whining and make a cross-platform game already!
 
C++Now Trip Report
C++Now Trip ReportC++Now Trip Report
C++Now Trip Report
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
Зачем нужен Go?
Зачем нужен Go?Зачем нужен Go?
Зачем нужен Go?
 
OpenStreetMap: small big data
OpenStreetMap: small big dataOpenStreetMap: small big data
OpenStreetMap: small big data
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
 
CodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игр
CodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игрCodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игр
CodeFest 2012. Шергин Д. — Разработка мульти-платформенных 3D-игр
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
Present yapc2010
Present yapc2010Present yapc2010
Present yapc2010
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусе
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Взаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и ErlangВзаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и Erlang
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
 

Similaire à To Go или не to Go

CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Ontico
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Ontico
 
maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014Maxim Dementyev
 
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)Ontico
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Nikita Baksalyar
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка UnixYandex
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковDevGAMM Conference
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей КалинецFwdays
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Джентельменский набор тест-лида
Джентельменский набор тест-лидаДжентельменский набор тест-лида
Джентельменский набор тест-лидаSQALab
 
JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)Mikhail Davydov
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистовKonstantin Cherkasov
 

Similaire à To Go или не to Go (20)

2014-11-01 02 Иван Зезюля. To go или не to go
2014-11-01 02 Иван Зезюля. To go или не to go2014-11-01 02 Иван Зезюля. To go или не to go
2014-11-01 02 Иван Зезюля. To go или не to go
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014
 
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
 
ОПК № 1 – Вводная
ОПК № 1 – ВводнаяОПК № 1 – Вводная
ОПК № 1 – Вводная
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка Unix
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движков
 
Golang
GolangGolang
Golang
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Джентельменский набор тест-лида
Джентельменский набор тест-лидаДжентельменский набор тест-лида
Джентельменский набор тест-лида
 
JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистов
 

To Go или не to Go