1. LET'S GO!
Go is a programming language designed
by Google to help solve Google's problems,
and Google has big problems.
Rob Pike, co-author, SPLASH 2012
2. U gógla w 2007 roku, przykładowy projekt:
kod w C - 2000 plików
4,2MB kodu źródłowego
8GB z zależnościami
build time w rozproszonym środowisku: 45min
źródło: talks.golang.org/2012/splash.article
5. OD 6 LAT NA RYNKU
Wiele platform
kompilowany do pojedynczej binarki
Ostatnio duży boom, co widać po statystykach i
repozytoriach na GitHub.
15 miejsce w rankingu popularności, zaraz obok Scali i
przed Clojure
Znam ludzi którzy przeszli z Ruby do pisania w Go. (Dynport)
źródło: redmonk.com/sogrady/2015/07/01/language-
rankings-6-15/
6. CO I JAK:
Szybki:
1-2 x szybszy od Pythona
~10-20% wolniejszy od Javy
choć niektóre corner-case’y z przewagą dla Go
Małe wymogi pamięciowe
mini appka serwerowa ~1,3MB
Ale binarki potrafią swoje ważyć - 6,2MB
7.
8. Skromny zestaw podstawowej gramatyki:
if/else
for
switch
type switch
Brak operatorów innych niż matematyczne, bitowe i
logiczne:
+ - * / %
| & ^ << >> &^
== != < > <= >=
&& || !
dodatkowo: * & <- (do wskaźników i kanałów)
9. Wbudowane typy danych:
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
rune
float32 float64
complex64 complex128
error
Rzutowanie typów explicit
Można definiować własne typy na bazie istniejących
10. Funkcje traktowane na prawach zmiennych
możliwe anonimowe oraz domknięcia (ang. closures)
Brak wyjątków
ale ma multi-return-value dla funkcji
Odwlekanie w czasie: `defer
prawie jak javascriptowy setTimeout(..., 0)
11. Struktury danych:
array
slice
map
struct z metodami
Ma wskaźniki, ale bez arytmetyki
Ma interfejsy, rozwiązywane na poziomie kompilacji lub
runtime-u
Brak dziedziczenia, ale ma zagnieżdżanie typów (type-
embedding)
13. Brak wersjonowania paczek (ang. package)
ale możliwe zaciąganie zależności (ang. import) np.
prosto z githuba/bitbucketa
Ma GC (garbage collector)
parallel mark-and-sweep
14. Wbudowane uruchamianie testów, ale nie ma asercji.
Sporo narzędzi, do profilowania kodu i code-coverage
Jeden styl formatowania: go fmt
wbudowany w kompilator formater (niestety oparty ma
tabach width=8 :/)
17. FAJNE LINKI:
- czemu
lepiej nie
- 2 lata doświadczeń
https://github.com/a8m/go-lang-cheat-sheet/
http://tour.golang.org/
https://golang.org/doc/effective_go.html
http://golang-examples.tumblr.com
http://blog.codeship.com/testing-in-go/
https://news.ycombinator.com/item?id=7660924
http://www.darkcoding.net/software/go-lang-after-four-
months/