5. Малко история
2007 стартира работата по проекта
2008 стартира имплементирането на компилатора
2009 първи публичен релийз
6. Малко история
2007 стартира работата по проекта
2008 стартира имплементирането на компилатора
2009 първи публичен релийз
2010 обявен за език на годината от Tiobe
7. Малко история
2007 стартира работата по проекта
2008 стартира имплементирането на компилатора
2009 първи публичен релийз
2010 обявен за език на годината от Tiobe
2011 се използва в production среда от Google
8. Малко история
2007 стартира работата по проекта
2008 стартира имплементирането на компилатора
2009 първи публичен релийз
2010 обявен за език на годината от Tiobe
2011 се използва в production среда от Google
2012 официален релийз на 1.0
9. Малко история
2007 стартира работата по проекта
2008 стартира имплементирането на компилатора
2009 първи публичен релийз
2010 обявен за език на годината от Tiobe
2011 се използва в production среда от Google
2012 официален релийз на 1.0
2013 официален резлий на 1.1
15. Три свята
C/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация и
не особено тривиален контрол над зависимостите
16. Три свята
C/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация и
не особено тривиален контрол над зависимостите
Java/C#: По-ефективен процес на разработка, компилация и контрол над
зависимостите, за сметка на изпълнение
17. Три свята
C/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация и
не особено тривиален контрол над зависимостите
Java/C#: По-ефективен процес на разработка, компилация и контрол над
зависимостите, за сметка на изпълнение
Python/Ruby: Изключително ефективен процес на разработка, без стъпка на
компилация, но изключително бавно изпълнение
18. Три свята
C/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация и
не особено тривиален контрол над зависимостите
Java/C#: По-ефективен процес на разработка, компилация и контрол над
зависимостите, за сметка на изпълнение
Python/Ruby: Изключително ефективен процес на разработка, без стъпка на
компилация, но изключително бавно изпълнение
*: Трудна паралелизация и ефективност в мултипроцесорни системи
21. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %gn", v, lim)
}
return lim
}
func main() {
fmt.Println(pow(3, 2, 10))
}
22. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
23. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
Вграден, бърз и ефективен garbage collector
24. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
Вграден, бърз и ефективен garbage collector
Безумно бърза компилация
25. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
Вграден, бърз и ефективен garbage collector
Безумно бърза компилация
Създаден да scale-ва
26. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
Вграден, бърз и ефективен garbage collector
Безумно бърза компилация
Създаден да scale-ва
Изключително опростен
27. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
Вграден, бърз и ефективен garbage collector
Безумно бърза компилация
Създаден да scale-ва
Изключително опростен
Забавен
28. Резултатът
Език с отворен код от ниско ниво
C-подобен синтаксис
Дълбоко залегнала идея за конкурентност
Вграден, бърз и ефективен garbage collector
Безумно бърза компилация
Създаден да scale-ва
Изключително опростен
Забавен … на моменти скучен
30. Модулната система
всичко е в пакет
в йерархия са
направени са като хората
import "log”
import googlelog "google/base/go/log"
31. НЕстандартни пакети
Колкото и да е пълна стандартната библиотека,
все ще ни се наложи нещо от вън
go get github.com/Vladimiroff/vec2d
import “github.com/Vladimiroff/vec2d”
var vector vec2d.Vector
38. Интерфейси
type Reader interface {
Read(b []byte) (n int, err error)
}
type Writer interface {
Write(b []byte) (n int, err error)
}
type ReadWriter interface {
Reader
Writer
}
If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.
39. Обектният модел
в този ред на мисли, няма методи
type ByteSlice []byte
func Append(slice *ByteSlice, data []byte) []byte {
// ...
}
40. Обектният модел
в този ред на мисли, няма методи
type ByteSlice []byte
func (self *ByteSlice) Append(data []byte) []byte {
// ...
}
ByteSlice.Append(data)
45. Да събудим perl-джии
от край време ни се обяснява как
регулярните изрази са бавни
Regular Expression Matching Can Be Simple And Fast
(but is slow in Java, Perl, PHP, Python, Ruby, ...)
Russ Cox, 2007
46. Да събудим perl-джии
от край време ни се обяснява как
регулярните изрази са бавни
Regular Expression Matching Can Be Simple And Fast
(but is slow in Java, Perl, PHP, Python, Ruby, ...)
Russ Cox, 2007
Fun fact: Russ Cox става core-developer на Go, през 2009
49. Concurrency
закърмено с тази идея в builtins
Много нишки == много проблеми
Goroutines!
doSomething()
doAnototherThing()
go doYetAnorherThingButinGoroutine()
doOneMoreThing()