Przesłane przez wydanie języka programowania Idź 1.15, 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 dystrybuowane przez 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 komponenty wykonawcze), 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.
Znacząco usprawniono pracę linkera, zarówno w zwiększaniu szybkości działania i zmniejszaniu zużycia pamięci, jak i w kierunku uproszczenia obsługi kodu. Testy na systemach operacyjnych korzystających z formatu pliku wykonywalnego ELF (Linux, FreeBSD, NetBSD, OpenBSD, Dragonfly, Solaris) wykazały, że typowy zestaw dużych aplikacji Go budowano o 20% szybciej, a zużycie pamięci zmniejszono średnio o 30%. Zwiększenie produktywności było możliwe dzięki przejściu na nowy format pliku obiektowego i przerobieniu wewnętrznych etapów w celu zwiększenia poziomu zrównoleglenia pracy. Natywny linker jest teraz domyślnie używany w systemach linux/amd64 i linux/arm64 w opcji „-buildmode=pie”, co nie wymaga już użycia linkera C.
W czasie wykonywania znacznie poprawiono dystrybucję małych obiektów w systemach z dużą liczbą rdzeni procesora i zmniejszono opóźnienia. W przypadku awarii zamiast adresu wyświetlane są wartości o typie numerycznym i string. Podczas wysyłania sygnałów SIGSEGV, SIGBUS i SIGFPE do aplikacji Go, w przypadku braku procedury obsługi os/signal.Notify, aplikacja zakończy działanie z wyjściem śledzenia stosu (poprzednio zachowanie było nieprzewidywalne).
Kompilator został zoptymalizowany pod kątem zmniejszenia rozmiaru generowanych plików wykonywalnych średnio o 5% poprzez zatrzymanie włączania niektórych metadanych do modułu zbierającego elementy bezużyteczne i bardziej agresywne czyszczenie nieużywanych metadanych.
Do kompilatora i asemblera dodano flagę „-spectre”, aby umożliwić ochronę przed atakami klasy Spectre (w przypadku większości programów nie jest to wymagane; włączenie opcji może być uzasadnione jedynie kilka bardzo konkretnych przypadków).
W certyfikatach X.509 pole CommonName zostało uznane za przestarzałe i nie jest już traktowane jako nazwa hosta, jeśli brakuje pola Alternatywne nazwy podmiotu.
Polecenie „go” w zmiennej środowiskowej GOPROXY może teraz wyświetlić listę wielu serwerów proxy, oddzielonych przecinkiem lub „|”. Jeśli pierwszy serwer proxy na liście zwróci błąd (404 lub 410), wówczas zostanie podjęta próba kontaktu przez drugi serwer proxy itp.
Narzędzie weterynarza dodało ostrzeżenie o próbie konwersji z ciągu znaków (x), jeśli „x” jest liczbą całkowitą inną niż runa lub bajt.
Do narzędzia objdump dodano flagę „-gnu”, aby wspierać dezasemblację składni asemblera GNU.
Dodano nowy pakiet czas/tzdata, co umożliwia zintegrowanie z programem bazy danych zawierających dane dotyczące stref czasowych.
Z tekstów źródłowych i dokumentacji REMOVED wyrażenia biała lista/czarna lista i master/slave, które są teraz zastąpione przez „lista dozwolonych”, „lista bloków”, „proces”, „pty”, „proc” i „kontrola”.
W bibliotece standardowej wprowadzono dużą część drobnych ulepszeń.
Dodano obsługę OpenBSD 6.7 w trybach GOARCH=arm i GOARCH=arm64 (poprzednio obsługiwane były tylko GOARCH=386 i GOARCH=amd64).
Kontynuowano rozwój 64-bitowej platformy RISC-V (GOOS=linux, GOARCH=riscv64).
W przypadku 32-bitowych systemów x86 następna wersja podniesie minimalne wymagania systemowe - nadal będą obsługiwane wyłącznie procesory z SSE2. Aby zbudować komputer w trybie GOARCH=386, będziesz potrzebować co najmniej Intel Pentium 4 (wydany w 2000 r.) lub AMD Opteron/Athlon 64 (wydany w 2003 r.).