let's go! - wprowadzenie do go
TRANSCRIPT
� 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
U gógla w 2007 roku, przykładowy projekt:
kod w C - 2000 plików4,2MB kodu źródłowego8GB z zależnościamibuild time w rozproszonym środowisku: 45min
źródło: talks.golang.org/2012/splash.article
GO, CZERPIE Z:
CPythonoccamLimbo, NewsqueakPascal i podobne
JEST TO JĘZYK:
proceduralnykompilowanystrukturalnywspółbieżnyimperatywnystatycznie silnie typowany
OD 6 LAT NA RYNKU
Wiele platform
kompilowany do pojedynczej binarki
Ostatnio duży boom, co widać po statystykach irepozytoriach na GitHub.
15 miejsce w rankingu popularności, zaraz obok Scali iprzed 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/
CO I JAK:
Szybki:1-2 x szybszy od Pythona~10-20% wolniejszy od Javychoć niektóre corner-case’y z przewagą dla Go
Małe wymogi pamięciowemini appka serwerowa ~1,3MBAle binarki potrafią swoje ważyć - 6,2MB
Skromny zestaw podstawowej gramatyki:if/elseforswitchtype switchBrak operatorów innych niż matematyczne, bitowe ilogiczne:+ - * / %| & ^ << >> &^== != < > <= >=&& || !dodatkowo: * & <- (do wskaźników i kanałów)
Wbudowane typy danych:
boolstringint int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptrbyterunefloat32 float64complex64 complex128error
Rzutowanie typów explicit
Można definiować własne typy na bazie istniejących
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)
Struktury danych:arrayslicemapstruct z metodami
Ma wskaźniki, ale bez arytmetykiMa interfejsy, rozwiązywane na poziomie kompilacji lubruntime-uBrak dziedziczenia, ale ma zagnieżdżanie typów (type-embedding)
Współbieżność wbudowana:goroutines i typ channel
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
Wbudowane uruchamianie testów, ale nie ma asercji.Sporo narzędzi, do profilowania kodu i code-coverageJeden styl formatowania: go fmt
wbudowany w kompilator formater (niestety oparty matabach width=8 :/)
REAL CODE �https://github.com/RaVbaker/uploader-server-go
PYTANIA?
FAJNE LINKI:
- czemulepiej nie
- 2 lata doświadczeń
https://github.com/a8m/go-lang-cheat-sheet/http://tour.golang.org/https://golang.org/doc/effective_go.htmlhttp://golang-examples.tumblr.comhttp://blog.codeship.com/testing-in-go/https://news.ycombinator.com/item?id=7660924
http://www.darkcoding.net/software/go-lang-after-four-months/
DZIĘKI!Twitter: GitHub: @RaVbaker RaVbaker