Język Go - czy warto?

0

Siema,

Mój kolega, który siedzi w linuksach poleca mi język go, chciałbym spytać w tym wątku Was o opinię na temat tego języka czy warto się go uczyć

Czy ten Go jest w stanie mi coś więcej zaoferować niż np. taki C++?

5

Coraz więcej projektów używa Go. Nawet w Polsce. Moim zdaniem będzie coraz bardziej popularne. Niemniej C nie wymrze. O C++ mogę mówić tylko najgorsze rzeczy i życzę mu śmierci.

1
doskanoness napisał(a):

Mój kolega, który siedzi w linuksach poleca mi język go, chciałbym spytać w tym wątku Was o opinię na temat tego języka czy warto się go uczyć

Ja się w nim tylko bawiłem, więc mogę stwierdzić jedynie, że opłaca się pobawić (dla własnej frajdy). Język jest prosty, a ma fajny model asynchroniczności (oparty o "goroutines"), co samo w sobie jest ciekawe.

Czy ten Go jest w stanie mi coś więcej zaoferować niż np. taki C++?

  • garbage collector (co może być zaletą i wadą).
  • goroutines
2

@doskanoness: Go jest IMO do innych zastosowań niż C++. Go najczęściej spotka się w webowce i infrastrukturze (docker, kubernetes). Jest o wiele bezpieczniejszy niż np. C++. Ma jednak swoje problemy, jednym z nich jest to, że wydaje się prostym językiem. Niestety ma masę pułapek, o których możesz szybko się przekonać googlujac np. gotchas, a to nie wszystkie niespodzianki. Brak generyków "wymusza" generowanie kodu, więc trzeba się zapoznać ze Swaggerem/OpenAPI, a masa tooli do tego jest dyskusyjnej jakości. Nie ma tutaj "obiektowości", a ludzie i tak na siłę starają się pisać tak kod. Masa przydatnych narzędzi jak np. go mod wyszła stosunkowo niedawno, więc można dość łatwo natrafić na taki projekt w swojej pracy. Go rozwija się też bardzo wolno. Po bodaj 12 latach od pierwszej wzmianki doczekał się generyków.

Wciąż jest to jednak moim zdaniem jedna z lepszych technologii do nauki i pracy. Kod jest szybki i bezpieczny w porównaniu do innych języków i czasu na naukę jaką trzeba włożyć by być "na tym samym" poziomie. Goroutines są naprawdę spoko, wraz z chanellami robią robotę, jak się wie jak tego używać :p. GC jest naprawdę spoko, przyjazne community.

Najlepiej sam ocenisz pisząc sam kilka aplikacji, albo pooglądasz kod na GH.

0

Czy nauka tego języka do backend'a (jvm) który chce w przyszłości pobawić się w dev/ops ma sens?

2

Go ma dosyć wąską specjalizację i nie jest wykorzystywany tak szeroko jak Python czy JS. Jednakże w Go powstało wiele aplikacji używanych w DevOps czy CloudOps takich jak: Docker, Kubernetes, Terraform. Ten język ma tę zaletę, że łączy statyczne typowanie i wydajność C/C++ z czytelnością i używalnością Pythona i JS.

Z pewnością warto się zainteresować, choć niekoniecznie jako pierwszy język.

1

java 1.5 :P

0

W 1.18 będą(so już w beta) typy generyczne, więc robi się ciekawie. Ja używam go-kit + np. Viper is fajnie się pisze.

0

Czy istnieje taki język jak Go, czyli też kompilowany bez maszyny wirtualnej z dobrym typowaniem i GC, ale bez wskaźników? Który wspiera wielowątkowość, jest niby Nim, D, ale nie spełniają wszystkich moich wytycznych.

1

Hmm, ale w golangu nie ma artytmetyki wskaźników https://go.dev/doc/faq#no_pointer_arithmetic więc raczej nie ma problemów z nimi związanych (oprócz tego, że GC w praktyce musi być non-compacting, bo to koliduje z pobieraniem adresu obiektu do późniejszego wykorzystania).

1
scaut napisał(a):

Czy istnieje taki język jak Go, czyli też kompilowany bez maszyny wirtualnej z dobrym typowaniem i GC, ale bez wskaźników? Który wspiera wielowątkowość, jest niby Nim, D, ale nie spełniają wszystkich moich wytycznych.

Możesz pisać w Javie, Scali, Kotlinie itp itd a potem skompilować javowy bajtkod w trybie AOT za pomocą https://www.graalvm.org/reference-manual/native-image/ (do samodzielnej natywnej binarki, bez żadnej VMki, JITa, etc przy odpalaniu) :] Jednak na razie nie jest to solidny wybór, bo masa kodu się nie kompiluje od razu pod native-image i trzeba kombinować.

2

Pamiętaj że C/C++ wybiera się po to żeby móc się wywyższać nad innymi, szczególnie nad klepaczami z webowki. GO jest stosowane w webowce, więc będzie trochę to twoja degradacja.

Poza tym atutem to wszystko jest lepsze niż c++.

4
scaut napisał(a):

Czy istnieje taki język jak Go, czyli też kompilowany bez maszyny wirtualnej z dobrym typowaniem i GC, ale bez wskaźników? Który wspiera wielowątkowość, jest niby Nim, D, ale nie spełniają wszystkich moich wytycznych.

Haskell oczywiście :D

  • System typów jest niesamowity i nie wiem czy ktoś ogarnia go w całości, ale nie trzeba korzystać ze wszystkich bajerów
  • w wyniku kompilacji za pomocà GHC dostajemy prostą binarkę, chyba tam jest nawet LLVM wpięty
  • wielowątkowość w Haskellu jest niesamowita. W zasadzie to każda komunikacja ze światem zewnętrznym domyślnie jest asynchroniczna dzięki monadzie IO
  • oczywiście można poprosić system o niezarządzany blok pamięci i robić na nim dziwne rzeczy, ale tak jest chyba w każdym języku. Ktoś nawet zaimplementował mutowalne kolekcje javopodobne na takich niezarządzanych blokach pamięci XD

UPDATE: a jak nie Haskell to OCaml

1

Jak bym miał wybierać między go i C++.
To bym wybrał go.

1

Nie wiem czy już było ale między Go i C++ jest jeszcze Rust - czyli język wydajny, bez GC i bez barokowości C++.

3

Pisze w go od okolo roku i moim zdaniem warto. Jest całkiem sporo ofert pracy (ostatnio znacznie więcej) ale co najistotniejsze jest bardzo mało osób chętnych, więc firmy zatrudniają kogo popadnie.

Sam język jest wyjątkowo prosty, tzn. dąży do tego aby jedną rzecz dało się napisać w jeden konkretny sposób. Nie jest to Python, Java czy nieszczęśliwy C++ w którym co nowa wersja to nowy sposób inicjalizowania zmiennych, a na koniec już nikt nie wie który sposób jest tym właściwym... W golangu trzeb wiele rzeczy zaakceptować i dostosować się do tego co oferuje język. Największy błąd jaki się popełnia na początku to przenoszenie schematów z innych języków do golanga - to się po prostu nie udaje. To należy rozumieć przez słowo prosty - nie chodzi tu o to że szybko się tego języka nauczysz (choć nie jest to na pewno trudny język w nauce).

1 użytkowników online, w tym zalogowanych: 0, gości: 1