Parę dni temu otrzymaliśmy kolejną wersję golang. Tym razem 1.13.
Jak zwykle, dostaliśmy szereg raczej mniejszych poprawek, wszystko wg. ideologii
małych kroków.
Ta wersja ma jednak długo oczekiwaną przeze mnie zmianę.
GOMODULES staje się domyślnym podejściem!
Wracając do początku. Oryginalnie golang opierał swoje działanie i narzędzia na strukturze katalogów i ich położeniu względem GOPATH, specjalnie określonej ścieżki na dysku.
Jest to kwestia subiektywna, ale strasznie mnie to irytowało, bo zawsze dzieliłem projekty raczej ze względu na klientów itp. raczej niż na technologię. Tu musiałem wszyskie projekty trzymać w jednym katalogu.
Ten wymóg był podyktowany nie tylko narzędziami do budowania, ale także organizacją zależności i bibliotek, która
od samego początku w Go odstawałą od ‘dzisiejszych standardów’. Twórcy Go obserwowali narzędzia, które tworzyła społeczność i zbierając doświadczenia i opinie stworzyli coś własnego - go modules.
Nie tylko Go doczekało się wreszcie porządnego systemu do zarządzania zależnościami, ale też uwolniło się od GOPATH. Go modules radzie sobie z każdym miejscem na dysku, projekty mogą leżeć tam gdzie NAM się podoba.
Co to ma konkretnie wspólnego z wersją 1.13?
Otóż go modules działało już od jakiegoś czasu, ale w opcji ‘opt in’. Musieliśmy wyraźnie powiedzieć, że chcemy tego używać. Od wersji 1.13 Go domyślnie będzie używać go modules, nawet jeśli projekt jest wewnątrz gopath.
Dla mnie to drobna, ale wyczekiwana zmiana!
Inne ciekawe punkty tej wersji to moim zdaniem:
- możliwość ‘owijania’ (wrap) błędów, co pozwoli nam tworzyć bogatszy kontekst dla sytuacji wyjątkowych (mamy też nowe funkcje
errors.Unwrap
,errors.Is
ierrors.As
) - paczka
database/sql
dostała dwa nowe typy:NullTime
iNullInt32
- wsparcie dla TLS 1.3
Więcej szczegółów możecie przeczytać oficjalnej dokumentacji