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

PPTX
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
PDF
PDF
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
PDF
Владимир Бородин - PostgreSQL
PPTX
Практические приёмы оптимизации .NET-приложений
ODP
обслуживание мультисайтинга
PDF
Как ВКонтакте использует Go
PDF
Tarantool 1.6: NoSQL database and application server
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
Владимир Бородин - PostgreSQL
Практические приёмы оптимизации .NET-приложений
обслуживание мультисайтинга
Как ВКонтакте использует Go
Tarantool 1.6: NoSQL database and application server

What's hot (19)

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

To Go или не to Go