2. Saint Perl 3, 18 декабря 2011 года
http://event.perlrussia.org/saintperl3/talk/157
Введение в язык программирования Go с
интересными примерами.
http://www.slideshare.net/andy.sh/go-perl
(132 слайда)
3. Мотивация
– Кругозор
– Тренды
– XXI век
– Why Python, Ruby, and Javascript are Slow
– PARALLELISM FOR THE WIN!
– Why Go
– The Case For Go
– Научится чему-то новому и интересному
4. Интересное
– ООП
– реализация конкурентного
программированию
– подход к работе с зависимостями
– подход к обработке ошибок
– стандартная библиотека
– философия разработки
5. Что такое Go
– "типизированный"* компилируемый язык
программирования )
– с 2007, 2009 г. – оф. анонс
– Open Source
– team: Rob Pike, Ken Thompson, Russ Cox
– современные потребности
(эффективность разработки, для
многопроцессорных, распределенных
систем)
– философия UNIX/C
– less is more
9. Diff Dec 2011 .. Jul 2013
– изменения в синтаксисе/api
– В 2012 вышла стабильная версия Go 1.0
– В 2013 вышла версия Go 1.1
– стабильное API
– выросшее коммьюнити
– первая книга, переведенная на русский
– больше пользователей (Canonical, ...)
– поддержка Google App Engine
– русская группа Go разработчиков
10. Go vs Perl – общее
- сборщик мусора
- go doc (еще проще чем POD), go test
- utf8
- обратная совместимость (go fix)
- ООП
- multiple function return values
- правильная область видимости
(замыкания)
- синтаксис (ruby/js, pascal & C)
- дух (душок? :) старой школы
11. – типизированный, (кросс-)компиляция
– code parse, spec, поддержка IDE
– code style (go fmt)
– regexp-ы (RE2)
– CPAN vs стандартная библиотека + VCS
– эффективность использования CPU/RAM
– конкурентное программирование
– философия
Go vs Perl различия
12. Что еще предлагает Go
– инструментарий: profiler, gdb, race detector
– fast (cross-)compilation
– GOMAXPROC
– go fmt (форматирование и рефакторинг)
– cgo,
– отсутствие исключений
– интерфейсы
*link 10k problem*
– решение 10K проблемы (100K-1000?K)
19. Аналогия из мира UNIX:
Goroutine – фоновый процесс
> go command() --> command &
Channel – это PIPE
> echo "hello" | reverse
Channels in Go
Конкурентное программирование:
Goroutines и Channels
20. echo "hello" | rev(erse)
http://play.golang.org/p/EJhZtE71RM
textChannel := make(chan string)
go func(s string) {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
textChannel <- string(runes)
}("hello")
string := <-textChannel
fmt.Println(string)
22. Go киллер фича
Поддержка конкурентного
программирования без мутексов, каллбеков,
тредов и форков
Сложно объяснить за 5 минут
Concurrency vs Parallelism
Go Concurrency Patterns
Advanced Go Concurrency Patterns
24. Success stories
– How We Went from 30 Servers to 2: Go
– Youtube (vitess), dl.google
– Canonical (Ubuntu)
– Heroku
– Tumblr
– Disqus
– Activestate
code.google.com/p/go-wiki/wiki/GoUsers
25. Попробовать Go
http://tour.golang.org/
GoLang Russian group (3-й митап 06.07.2013)
Научиться Go
● Writing, building, installing, and testing Go
code (YouTube 5 минутное видео)
● http://blog.golang.org/
● How to Learn Go
● Resources for new Go programmers
● http://golang.org/ref/spec
26. Что еще почитать/посмотреть
Google: go lang <key words>
выступления Rob Pike, Andrew Gerrand,
Russ Cox.
CSP book
OSCON 2010: Rob Pike, "Public Static Void"
27. Go make programming fun again
– (конкурентный) код может быть
эффективным и простым
– типизация – полезная вещь
– можно программировать без
наследования, ексепшенов
28. Критика Go
– отсутствие генериков
– пакетный менеджер
– обработка ошибок
– наличие библиотек
– встраивание
– низкоуровневый язык