Wprowadzenie do zarządzania zależnościami w Go
Zarządzanie zależnościami jest krytycznym aspektem każdego projektu programistycznego, ponieważ pomaga zarządzać wersjami bibliotek i pakietów, na których opiera się projekt. W Go (Golang), zarządzanie zależnościami zapewnia, że projekty Go są powtarzalne i łatwe w utrzymaniu, ułatwiając rozwiązywanie problemów związanych z wersjonowaniem, utrzymując kompatybilność z innymi pakietami i usprawniając ogólny proces rozwoju.
Przed Go Modules zarządzanie zależnościami w Go było mniej usprawnione. Programiści często korzystali z narzędzi takich jak dep
, glide
lub govendor
do zarządzania zależnościami. Chociaż narzędzia te były pomocne, nie były one częścią oficjalnego projektu Go, a tym samym powodowały tarcia w przyjmowaniu Go jako języka dla niektórych programistów.
Era modułów Go
W 2018 roku zespół Go wprowadził pojęcie "modułów", nowego standardu zarządzania zależnościami w projektach Go. Moduły to zbiory powiązanych pakietów, które są wersjonowane razem, zapewniając wszystkie niezbędne zależności dla bazy kodu. Wraz z wprowadzeniem Go Modules w Go 1.11, zarządzanie zależnościami stało się prostsze, bardziej wszechstronne i oficjalnie wspierane przez projekt Go. Moduły Go wprowadziły takie funkcje jak
- Wersjonowanie zależności przy użyciu Semantic Versioning (SemVer)
- Uproszczone polecenia zarządzania zależnościami (np. go
get
,go mod tidy
) - Automatyczne generowanie pliku manifestu
(go.
mod) zawierającego szczegółowe informacje o zależnościach - Automatyczne pobieranie i buforowanie wymaganych zależności
Dzięki Go Modules nie jest już wymagane umieszczanie kodu w katalogu $GOPATH
, co wcześniej było ograniczeniem w rozwoju Go. Ten nowy system umożliwia bardziej elastyczną strukturę projektu, ułatwiając pracę nad projektami Go podczas przełączania się między różnymi repozytoriami.
Konfigurowanie projektu modułu Go
Rozpoczęcie pracy z modułami Go jest proste. Wykonaj poniższe kroki, aby skonfigurować nowy projekt Go Modules.
- Najpierw upewnij się, że zainstalowałeś Go w wersji 1.11 lub nowszej w swoim systemie. Możesz sprawdzić wersję Go, uruchamiając
go version
w terminalu. - Przejdź do wybranej lokalizacji i utwórz nowy folder projektu o opisowej nazwie, np.
my-go-project
. - Przejdź do nowo utworzonego folderu w wierszu poleceń.
- Zainicjuj nowy moduł Go, uruchamiając polecenie go mod
init
, a następnie ścieżkę modułu. Na przykład, możesz uruchomić go modinit github.com/your-username/my-go-project
, jeśli zamierzasz hostować projekt na GitHub. Polecenie to generuje nowy plik o nazwiego.
mod w folderze projektu.
Plik go
.mod jest sercem projektu Go Modules. Zawiera on metadane dotyczące modułu, takie jak jego nazwa, oraz listę wszystkich wymaganych przez niego zależności. Będziesz wchodzić w interakcje z plikiem go
.mod przez cały cykl życia projektu Go, aby zarządzać zależnościami. Teraz, gdy projekt Go Module jest już skonfigurowany, możesz zacząć dodawać zależności i zarządzać nimi za pomocą systemu Go Modules.
Zarządzanie zależnościami w modułach Go
Moduły Go zapewniają proste i skuteczne podejście do zarządzania zależnościami projektu. Pozwalają one dodawać, aktualizować lub usuwać określone wersje zależności, pomagając zachować kontrolę nad projektem i jego interakcjami z innymi pakietami. Ta sekcja poprowadzi Cię przez proces zarządzania zależnościami w projekcie Go Modules.
Dodawanie zależności
Aby dodać nową zależność, wystarczy zaimportować żądany pakiet do kodu Go. Na przykład, jeśli chcesz dodać github.com/gorilla/mux
do swojego projektu, zaimportuj go w następujący sposób:
import ( "github.com/gorilla/mux" )
Przy następnym uruchomieniu go build
lub go test
, Go automatycznie pobierze wymagany pakiet, zaktualizuje pliki go.mod
i go.sum
oraz skonfiguruje projekt do korzystania z określonego pakietu. Alternatywnie można użyć polecenia go
get, aby jawnie dodać nową zależność:
go get github.com/gorilla/mux
Spowoduje to nie tylko pobranie pakietu, ale także aktualizację plików go.mod
i go.
sum projektu.
Aktualizacja zależności
Aby zaktualizować określoną zależność do nowej wersji, użyj polecenia go get
, a następnie ścieżki importu pakietu i żądanego numeru wersji:
go get github.com/gorilla/[email protected]
Polecenie to zaktualizuje plik go
.mod o nową wersję pakietu i pobierze jego kod źródłowy. Należy pamiętać, że jeśli zaktualizowany pakiet wprowadza przełomowe zmiany, może być konieczne odpowiednie dostosowanie kodu.
Usuwanie zależności
Aby usunąć zależność z projektu, należy najpierw usunąć odpowiednie instrukcje importu z kodu źródłowego. Następnie uruchom polecenie go mod tidy
, aby wyczyścić plik go.
mod:
go mod tidy
Polecenie to usunie wszelkie nieużywane zależności z pliku go
.mod i zapewni, że projekt pozostanie czysty i uporządkowany.
Semantyczne wersjonowanie i moduły Go
Semantic Versioning (SemVer) to powszechnie przyjęty system wersjonowania, który przypisuje unikalne numery wersji do wydań oprogramowania. Wykorzystuje on trzyczęściowy format numeracji: Major.Minor.Patch (np. 1.2.3). W SemVer:
- Poważne zmiany w wersji wskazują na zmiany przełomowe i wymagają ręcznego dostosowania kodu.
- Drobne zmiany wersji wprowadzają nowe funkcje, zachowując kompatybilność wsteczną.
- Zmiany wersji poprawek obejmują poprawki błędów i drobne ulepszenia wydajności, również kompatybilne wstecz.
Go Modules zawiera semantyczne wersjonowanie do obsługi wersjonowania zależności, umożliwiając programistom łatwiejsze zarządzanie aktualizacjami, kompatybilnością wsteczną i łamaniem zmian. Podczas określania wersji zależności za pomocą Go Modules można używać zakresów wersji lub określonych numerów wersji. Na przykład: - Aby pobrać najnowszą stabilną wersję pakietu, użyj ścieżki importu pakietu bez numeru wersji: go get github.com/gorilla/mux
. - Aby pobrać konkretną wersję, należy dodać numer wersji po symbolu @
: go get github.com/gorilla/[email protected].
- Aby pobrać najnowszą pomniejszą lub poprawioną aktualizację w ramach określonej wersji głównej, użyj symbolu ^
(karetki): go get github.com/gorilla/mux@^v1.0.0
.
Najczęściej używane polecenia modułów Go i ich zastosowania
Oto niektóre z najczęściej używanych poleceń Go Modules i ich scenariusze użycia:
go mod init
go mod initinicjuje
nowy projekt Go Modules w bieżącym katalogu. Generuje plik go.
mod, który zawiera informacje o module, jego zależnościach i ograniczeniach wersji.
go mod init example.com/myproject
Zastąp example. com/myproject
ścieżką modułu.
go get
go
get jest wszechstronnym poleceniem używanym do dodawania, aktualizowania lub usuwania zależności. Podaje ścieżkę importu pakietu, opcjonalnie z numerem wersji lub zakresem.
go get github.com/gorilla/[email protected]
To polecenie dodaje lub aktualizuje pakiet github.com/gorilla/mux
do wersji v1.8.0.
go mod tidy
go modtidy
usuwa nieużywane zależności z pliku go.
mod i aktualizuje go, aby odzwierciedlał instrukcje importu w kodzie źródłowym projektu.
go mod tidy
Uruchom to polecenie po usunięciu instrukcji importu dla niechcianych zależności.
go mod graph
go
mod graph wyświetla drzewo zależności projektu, pokazując zarówno bezpośrednie, jak i pośrednie zależności w czytelnym formacie. Polecenie to może być pomocne podczas debugowania złożonych zależności.
go mod graph
go mod verify
go modverify
sprawdza integralność zależności wymienionych w pliku go.
sum. Jeśli suma kontrolna zależności nie zgadza się z zapisaną wartością, polecenie zgłosi błąd.
go mod verify
Rozwiązywanie konfliktów zależności
Konflikty zależności mogą powstać, gdy projekt zależy od wielu pakietów o różnych wymaganiach dotyczących wersji dla współdzielonych zależności. Moduły Go zapewniają wbudowany mechanizm obsługi tych konfliktów za pomocą dyrektyw replace
i exclude
w pliku go.
mod.
Dyrektywa replace
Dyrektywa replace
pozwala zmienić wersję modułu na inną lub zmapować ją na lokalną ścieżkę. Może to być przydatne w sytuacjach, w których trzeba przetestować określone wersje, rozwidlone projekty lub lokalne zmiany przed zatwierdzeniem do zdalnego repozytorium. Aby użyć dyrektywy replace, dodaj następującą linię do pliku go.
mod:
replace example.com/original/module v1.2.3 => example.com/new/module v1.4.0
Spowoduje to zastąpienie example. com/original/module
w wersji v1 .
2.3 przez example .com/new/module
w wersji v1.
4.0. Można również zastąpić moduł ścieżką lokalną:
replace example.com/original/module v1.2.3 => ../local/path/to/new/module
Dyrektywa exclude
Możesz użyć dyrektywy exclude
, aby zapobiec używaniu określonych wersji modułu w projekcie. Jest to przydatne, gdy wiesz, że konkretna wersja ma problemy z kompatybilnością lub luki w zabezpieczeniach. Aby wykluczyć wersję modułu, dodaj następującą linię do pliku go.
mod:
exclude example.com/target/module v1.2.3
Pamiętaj, aby uruchomić go mod tidy
po zastosowaniu tych zmian, aby zaktualizować plik go.sum
i ponownie obliczyć drzewo zależności.
Prywatne moduły Go i zarządzanie repozytorium
Praca z prywatnymi modułami Go i repozytoriami jest podobna do pracy z publicznymi, ale istnieją pewne dodatkowe kroki w celu zapewnienia właściwego uwierzytelniania i prywatności.
Konfiguracja GOPRIVATE
Aby zapobiec wyciekowi ścieżek importu do serwerów publicznych, należy skonfigurować zmienną środowiskową GOPRIVATE
. Zmienna ta określa rozdzielaną przecinkami listę wzorców ścieżek importu dla prywatnych repozytoriów.
go env -w GOPRIVATE=example.com/private/path/*
Używanie tokenów dostępu
Aby korzystać z prywatnych repozytoriów, zazwyczaj należy uwierzytelnić się w usłudze hostingu kodu źródłowego, takiej jak GitHub lub GitLab. Utwórz osobisty token dostępu z odpowiednimi uprawnieniami (takimi jak zakres repozytorium
dla GitHub). Szczegółowe kroki tworzenia tokenu dostępu można znaleźć w dokumentacji usługi hostingowej. Po uzyskaniu tokenu dostępu skonfiguruj zmienną środowiskową do uwierzytelniania. Użyj odpowiedniej zmiennej środowiskowej w zależności od usługi VCS.
export GIT_TERMINAL_PROMPT=0 export GITHUB_TOKEN=YOUR_ACCESS_TOKEN
Umożliwia to poleceniu go
pobieranie i uwierzytelnianie prywatnych repozytoriów jako modułów Go. Jeśli pracujesz z wieloma usługami VCS, możesz skonfigurować indywidualne tokeny dostępu dla każdej z nich, definiując w razie potrzeby oddzielne zmienne środowiskowe.
Migracja z poprzednich systemów zarządzania zależnościami
Przed Go Modules istniały różne systemy zarządzania zależnościami, takie jak Dep, glide lub niestandardowe rozwiązania katalogów dostawców. Jeśli nadal korzystasz z tych systemów, nadszedł czas na migrację do Go Modules, aby pozostać na bieżąco i czerpać korzyści z nowoczesnego zarządzania zależnościami Golang. Aby dokonać migracji z poprzedniego systemu zarządzania zależnościami do Go Modules, wykonaj następujące kroki:
- Utwórz kopię zapasową oryginalnego projektu, aby w razie potrzeby móc powrócić do poprzedniego stanu.
- Usuń wszystkie istniejące pliki zarządzania zależnościami (np.
Gopkg.toml
lubGopkg.lock
). - Przejdź do katalogu głównego projektu w terminalu i uruchom
go mod init
, aby utworzyć nowy plikgo.
mod. Spowoduje to również próbę przekonwertowania poprzedniego pliku zależności, jeśli jest obecny, na wpisy Go Modules. - Uruchom
go mod tidy
, aby wypełnić plikgo
.mod zależnościami z poprzedniego systemu. To polecenie zapewnia, że tylko niezbędne pakiety są częścią drzewa zależności. - W tym momencie może być konieczne wprowadzenie zmian w pliku
go
.mod w celu rozwiązania konfliktów zależności lub wymuszenia określonych wersji. Użyj dyrektywreplace
iexclude
, aby poradzić sobie z tymi problemami. - Sprawdź, czy projekt nadal się kompiluje i przechodzi testy zgodnie z oczekiwaniami.
Wykonując te kroki, Twój projekt powinien teraz działać z modułami Go, usprawniając zarządzanie zależnościami i czyniąc go bardziej łatwym w utrzymaniu na dłuższą metę. Wszelkie utrzymujące się problemy należy rozwiązać, dostosowując plik go.
mod lub sprawdzając ścieżki importu, aby upewnić się, że są one zgodne z prawidłowym formatem.
AppMaster: Przyspieszenie rozwoju aplikacji opartych na Golang
Włączenie modułów Go i najlepszych praktyk zarządzania zależnościami do codziennego przepływu pracy ma kluczowe znaczenie dla zapewnienia łatwego w utrzymaniu i skalowalnego projektu oprogramowania opartego na języku Golang. Ale co, jeśli można przyspieszyć cały proces tworzenia aplikacji, jednocześnie wykorzystując moc Golang?
Warto wspomnieć o AppMaster.io, kompleksowej platformie no-code z naciskiem na generowanie aplikacji backendowych opartych na języku Golang przy użyciu wizualnego środowiska programistycznego. Oprócz aplikacji backendowych, AppMaster umożliwia tworzenie aplikacji internetowych i mobilnych przy użyciu zintegrowanego podejścia zaprojektowanego w celu usprawnienia procesu rozwoju.
Dzięki AppMaster użytkownicy mogą tworzyć modele danych (schemat bazy danych), projektować procesy biznesowe oraz definiować interfejsy API REST i WebSocket endpoints za pomocą wizualnego interfejsu użytkownika. Aplikacje internetowe są tworzone przy użyciu interfejsu " przeciągnij i upuść " wraz z projektantem procesów biznesowych dla w pełni interaktywnego doświadczenia użytkownika. Aplikacje mobilne są projektowane w podobny sposób, z mobilnym projektantem procesów biznesowych i możliwością projektowania interfejsu użytkownika.
AppMasterPlatforma pobiera plany i generuje kod źródłowy aplikacji po naciśnięciu przycisku "Opublikuj". Kompiluje aplikacje, uruchamia testy, pakuje je do kontenerów Docker (dla aplikacji backendowych) i wdraża wszystko w chmurze, a wszystko to w ciągu kilku sekund.
Aplikacje backendowe są generowane przy użyciu języka Golang (Go), korzystając z wydajności, prostoty i łatwości konserwacji oferowanych przez Golang. Aplikacje internetowe są generowane przy użyciu frameworka Vue3 i JavaScript/TypeScript, podczas gdy aplikacje mobilne korzystają z frameworka serwerowego AppMaster, Kotlin i Jetpack Compose dla Androida oraz SwiftUI dla aplikacji iOS.
Dzięki potężnej platformie AppMaster nawet osoby bez doświadczenia w kodowaniu mogą stworzyć kompletne, skalowalne rozwiązanie programistyczne, które obejmuje zaplecze serwera, strony internetowe, portale klientów i natywne aplikacje mobilne. AppMaster nie tylko przyspiesza cały proces tworzenia oprogramowania, ale także całkowicie eliminuje dług techniczny, generując aplikacje od zera za każdym razem, gdy wymagania są modyfikowane.
Jeśli rozważasz przyjęcie platformy no-code dla swoich potrzeb w zakresie tworzenia oprogramowania, zwłaszcza takiej, która wykorzystuje zalety Golang, AppMaster powinna znaleźć się na szczycie Twojej listy. Zarejestruj bezpłatne konto i poznaj przyszłość tworzenia aplikacji dzięki rozwiązaniu, które jest 10x szybsze i 3x bardziej opłacalne.