6. Статическая типизация
x := 1 + 2 // int
y := 2.0 * 21.0 // float
var x int = 1 + 2
var y float32 = 2.0 * 21.0
Это эквивалентно:
С автоматическим выводом типов:
9. Каналы (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
10. Интерфейсы
type Reader interface {
Read(p []byte) (n int, err error)
}
Любой тип, который реализует такой метод
Read — является Reader’ом
12. Простота и минимализм
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
Количество ключевых слов:
13. Плюшки
• Множественные возвращаемые значения
• go fmt
• import "github.com/go-martini/martini"
• Строгая система типов (нет неявных
преобразований)
• Весьма хорошая стандартная библиотека
• Слайсы
14. Кто использует Go
• Docker, в т.ч. в составе Yandex.Cocaine
• Dropbox (“major parts of infrastructure”)
• Canonical
• Heroku (Doozer data store)
• BBC World News
• AirBrake (crash reporting)
• SoundCloud
• Google :)