15. Кречетов Иван Презентация питч-сессии Интеллектуальная Робототехника SUV2015:
2014-11-01 02 Иван Зезюля. To go или не to go
Transcript of 2014-11-01 02 Иван Зезюля. To go или не to go
Немного истории• 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) 32C++ (1991) 48
Java (3rd ed.) 50C# 77
C++0x 72+11JavaScript 26+16
Python (2.7) 31Pascal 35Oberon 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 :)