Wyczekiwany język programowania Go 1.18 został wreszcie wprowadzony jako wersja produkcyjna, oferując swoje przełomowe możliwości generyczne. Jest to najbardziej znacząca zmiana w języku programowania Go od czasu pierwszej premiery Go 1.0 w 2012 roku. Wersję Go 1.18 można pobrać ze strony go.dev od 15 marca.
Generics to funkcja, o którą najczęściej prosili programiści Go, oferując wsparcie dla kodu generycznego przy użyciu typów sparametryzowanych. Kolejne wydania mają zapewnić dalsze wsparcie dla bardziej skomplikowanych ogólnych przypadków użycia. Użytkownicy mogą uzyskiwać dostęp do informacji na temat tej funkcji za pośrednictwem ogólnego samouczka i informacji o wydaniu .
Serwer języka Go, gopls, wraz z rozszerzeniem Visual Studio Code Go, obsługują teraz generyczne. Instrukcje dotyczące instalowania goplów z rodzajami można znaleźć w dokumentacji.
Wersja produkcyjna Go 1.18 śledzi etapy beta i kandydujące do wydania. Pierwotne wydanie było przewidywane na luty 2022 r., Ale zostało opóźnione do połowy marca. Wersja Go 1.18 Beta 1, która zadebiutowała 14 grudnia, była pierwszą wersją zapoznawczą opracowanego przez Google języka open source do obsługi ogólnego kodu przy użyciu typów sparametryzowanych. Ta wersja beta była również najczęściej pobieraną wersją beta Go w historii, szczycąc się dwukrotnie większą liczbą pobrań niż jakakolwiek poprzednia wersja beta.
Programowanie generyczne to ulepszenie, które umożliwia reprezentację funkcji i struktur danych w formie ogólnej z wyodrębnionymi typami. Ułatwia to udostępnianie kodu i upraszcza tworzenie programów.
Zespół Go zalecił ostrożność w podejściu do nowych funkcji generycznych, ponieważ nowe błędy mogą pojawić się w każdej istotnej nowej funkcji. Co więcej, obsługa specyficznych, subtelnych przypadków, takich jak niektóre rodzaje rekurencyjnych typów generycznych, została odłożona do przyszłych wydań.
Pomimo tego ostrzeżenia, pierwsi użytkownicy podobno byli zadowoleni z nowej funkcji. Krótki samouczek dotyczący rozpoczynania pracy z lekami generycznymi został opublikowany tutaj . Chociaż Go miał typy interfejsów, formę programowania generycznego, brakowało mu pewnych aspektów, których programiści Go chcieli od generycznych, jak podano w poście na blogu z lipca 2019 r. Na przykład zwolennicy generyków Go szukali funkcji takich jak Odwróć bez zwracania uwagi na typ elementu wycinka.
Opublikowane notatki dotyczące Go 1.18 podkreślają również inne kluczowe funkcje, takie jak:
- Wbudowana obsługa pisania testów opartych na fuzzingu w celu identyfikacji danych wejściowych powodujących awarię programu lub zwrócenie nieprawidłowych odpowiedzi. Ta funkcja jest eksperymentalna w Go 1.18.
- Tryb obszaru roboczego Go umożliwiający programistom jednoczesną pracę z wieloma modułami Go, niezbędny w przypadku bardziej rozbudowanych projektów.
- Ulepszona wersja polecenia go -m, która teraz zapisuje szczegóły kompilacji, takie jak flagi kompilatora.
- Zmienna środowiskowa GOAMD64 umożliwiająca użytkownikom wybór spośród czterech wersji architektury AMD64.
- Poprawa wydajności procesora w Apple M1, ARM64 i PowerPC64 nawet o 20%, co można przypisać rozszerzeniu konwencji wywoływania ABI rejestru Go 1.17 na te architektury.
- Porty Windows/Arm i Windows/Arm64 obsługują teraz wywłaszczanie bez współpracy, dzięki czemu ta funkcja jest dostępna dla wszystkich czterech portów Windows i potencjalnie rozwiązuje subtelne błędy napotykane podczas wywoływania funkcji Win32, które blokują się przez dłuższy czas.
- Bardziej przewidywalny narzut związany z wyrzucaniem elementów bezużytecznych, gdy źródła pracy GC inne niż sterty są znaczące, ze względu na uwzględnienie tych źródeł podczas określania częstotliwości uruchamiania wyrzucania elementów bezużytecznych.
Wersja Go 1.17 została wydana w sierpniu. Go jest najbardziej znany ze swojego zastosowania w rozwoju systemu kontenerów Docker i został zaprojektowany jako prosty, łatwy do nauczenia się język programowania z solidną obsługą współbieżności. Deweloperom, którzy chcą poznać rozwiązania no-code, takie jak platforma AppMaster, do tworzenia aplikacji internetowych, mobilnych i zaplecza, może to pomóc przyspieszyć tworzenie aplikacji i obniżyć koszty, eliminując dług techniczny.