wydanie języka programowania , który jest rozwijany przez Google przy udziale społeczności jako rozwiązanie hybrydowe, które łączy w sobie wysoką wydajność języków kompilowanych z zaletami języków skryptowych, takimi jak łatwość pisania kodu, szybkość programowania, i ochrona przed błędami. Kod projektu na licencji BSD.
Składnia Go jest oparta na znanych elementach języka C z pewnymi zapożyczeniami z języka Python. Język jest dość zwięzły, ale kod jest łatwy do odczytania i zrozumienia. Kod Go jest kompilowany do samodzielnych binarnych plików wykonywalnych, które działają natywnie bez użycia maszyny wirtualnej (profilowanie, debugowanie i inne podsystemy wykrywania problemów w czasie wykonywania są zintegrowane jako ), co pozwala osiągnąć wydajność porównywalną z programami w języku C.
Projekt jest początkowo rozwijany z myślą o programowaniu wielowątkowym i wydajnej pracy w systemach wielordzeniowych, w tym o zapewnieniu środków zaimplementowanych na poziomie operatora do organizowania obliczeń równoległych i interakcji między równolegle wykonywanymi metodami. Język zapewnia również wbudowaną ochronę przed przekroczeniem przydzielonych bloków pamięci oraz zapewnia możliwość korzystania z Garbage Collectora.
Głównym , wprowadzony w wersji Go 1.14:
- Nowy system modułów w poleceniu „go” został uznany za gotowy do ogólnego użytku, domyślnie włączony i zalecany do zarządzania zależnościami zamiast GOPATH. Nowy system modułów charakteryzuje się zintegrowaną obsługą wersji, narzędziami do dostarczania pakietów i ulepszonym zarządzaniem zależnościami. Dzięki modułom programiści nie są już ograniczeni do pracy w obrębie drzewa GOPATH, mogą jawnie definiować zależności uwzględniające wersje i tworzyć powtarzalne kompilacje.
- obsługa osadzania interfejsów z nakładającymi się zestawami metod. Metody wbudowanego interfejsu mogą teraz mieć takie same nazwy i sygnatury jak metody istniejących interfejsów. Metody zadeklarowane jawnie pozostają unikalne jak poprzednio.
- Poprawiono wydajność wyrażenia „defer”, które jest teraz niemal tak szybkie jak bezpośrednie wywołanie funkcji odroczonej, co pozwala na wykorzystanie odroczonego wykonywania funkcji w kodzie wrażliwym na wydajność.
- Obsługiwane jest teraz asynchroniczne wywłaszczanie gorutyny — pętle niezawierające wywołań funkcji nie mogą już potencjalnie powodować blokad harmonogramu ani opóźniać rozpoczęcia zbierania śmieci.
- Poprawiono wydajność systemu alokacji stron pamięci, a w konfiguracjach z dużymi wartościami GOMAXPROCS zaobserwowano znacznie mniej konfliktów blokad. Rezultatem jest mniejsze opóźnienie i większa przepustowość podczas intensywnego paralelizacji dużych bloków pamięci.
- Zoptymalizowano blokady i zmniejszono liczbę przełączeń kontekstu podczas uruchamiania wewnętrznych liczników czasu używanych w funkcjach time.After, time.Tick, net.Conn.SetDeadline.
- Polecenie go ma domyślnie włączoną flagę „-mod=vendor”, jeśli w katalogu głównym znajduje się katalog dostawcy służący do wysyłania zewnętrznych zależności powiązanych z konkretnym dostawcą. Dodano osobną flagę „-mod=mod” umożliwiającą ładowanie modułów z pamięci podręcznej modułów zamiast z katalogu „vendor”. Jeśli plik go.mod jest domyślnie przeznaczony tylko do odczytu, flaga „-mod=readonly” jest ustawiana, jeśli brakuje głównego katalogu „vendor”. Dodano flagę „-modfile=file” w celu określenia alternatywnego pliku go.mod zamiast tego, który znajduje się w katalogu głównym modułu.
- Dodano zmienną środowiskową GOINSECURE. Po ustawieniu polecenie go nie wymaga protokołu HTTPS i pomija sprawdzanie certyfikatu podczas bezpośredniego ładowania modułów.
- Kompilator ma teraz domyślną flagę „-d=checkptr” sprawdzającą zgodność kodu z zasadami bezpiecznego użycia dla unsafe.Pointer.
- W dostawie znajduje się nowy pakiet z niekryptograficznymi funkcjami skrótującymi do tworzenia tablic skrótów dla dowolnych sekwencji bajtów lub ciągów znaków.
- Dodano eksperymentalną obsługę platformy RISC-V 64-bitowej w Linux.
- Dodano obsługę FreeBSD na 64-bitowych systemach ARM.
Źródło: opennet.ru
