Go raczej nigdy nie zastapi javy, zupelnie inna filozofia stoi za tym jezykiem. Do tego jezeli chodzi o liczbe ofert pracy to jest kiepsko i od pewnego czasu nic sie nie zmienia.
jak zupełnie inna?
Java to miał być prosty, obiektowy, statycznie typowany język programowania z bezpiecznym zarządzaniem pamięcią robionym przez GC i bez pułapek C++.
Na poczatku moze i tak bylo. Po latach mamy jezyk, ktory jest praktycznie zrosniety ze springiem i ciezko mowic o szybkim developmencie bez wykorzystania tego frameworka. W efekcie nie ma nawet co mowic o prostocie, bo 80% osob nie ma zielonego pojecia co sie dzieje i nazywa to "springowa magia". Owszem jest to kwestia frameworka, ale skoro jezyk nic z tym nie robil to najwidoczniej taka sytuacja jest w porzadku.
Go to miał być prosty obiektowy, zarządzany, statycznie typowany język programowania łatwe do nauczenia przez ludzi świeżo po studiach którzy przyszli pracować w Google.
No nie bardzo. Nawet tworcy jezyka w kwestii czy Go jest obiektowy mowia "to zalezy": https://go.dev/doc/faq#Is_Go_an_object-oriented_language
Mial sluzyc w googlu, ale nie tylko swiezakom, a po prostu usprawnic development, tak zeby kazdy byl w stanie rozumiec kod bez uprzedniej tygodniowej analizy wielkich systemow.
Oba języki mają dość ciężki runtime, oba są oparte o polimorfizm czasu wykonania, oba mają kompilator nastawiony bardziej na szybkość kompilacji niż optymalizację i oba mają rozbudowaną bibliotekę standardową.
Obydwa tez finalnie sa tlumaczne na jezyk maszynowy, no kto by sie spodziewal :D.
Jak dla mnie to Go idealnie się wpisuje w wymagania stawiane początkowo Javie, zwłaszcza przed Javą 1.5. Nawet to uczucie bycia ograniczonym (Java: nie potrzebujesz przeciążania operatorów; Go: nie potrzebujesz genericsów) jest podobne.
Java nadal nie pozwala przeciazac operator, a generyki w Go istnieja chyba od wersji 1.18 (prawie 2 lata temu).
Inna filozofia to stoi za Rustem: Możesz wszystko, damy Ci cały warsztat, każdy rodzaj młotka, tysiące bitów do śrubokrętów, łącznie z piłą elektryczną, obrabiarką CNC, prasą i drukarką 3D ale damy Ci odpowiednie narzędzia abyś nie zrobił sobie tym krzywdy (jdnak możesz nie używać - patrz unsafe).
Dla odmiany Java/Go: damy Ci plastikowy śrubokręt i drewniany młotek, powinno wystarczyć, poradzisz sobie.
To jest jakis belkot na ktory nawet nie umiem odpowiedziec.
Ktokolwiek pisal komercyjne systemy w tych jezykach doskonale rozumie roznice i nie uzywalby ich zamiennie, bo robienie wielu rzeczy w Go (np przetwarzanie danych) za pomoca raw loopow nie dosc, ze byloby masochistyczne to zajmowaloby 20 razy wiecej miejsca niz ekwiwalent w javowych streamach.
Za java stala prostota (ktorej juz nie ma), w przypadku Go mowimy o minimalizmie