Grow with AppMaster Grow with AppMaster.
Become our partner arrow ico

Moduli Go e gestione delle dipendenze

Moduli Go e gestione delle dipendenze

Introduzione alla gestione delle dipendenze in Go

La gestione delle dipendenze è un aspetto critico di qualsiasi progetto software, in quanto aiuta a gestire le versioni delle librerie e dei pacchetti su cui il progetto si basa. In Go (Golang), la gestione delle dipendenze garantisce la riproducibilità e la manutenibilità dei progetti Go, facilitando la risoluzione dei problemi di versionamento, il mantenimento della compatibilità con altri pacchetti e la semplificazione del processo di sviluppo complessivo.

Software development process

Prima di Go Modules, la gestione delle dipendenze in Go era meno snella. Gli sviluppatori ricorrevano spesso a strumenti come dep, glide o govendor per gestire le dipendenze. Sebbene questi strumenti fossero utili, non facevano parte del progetto ufficiale di Go e quindi creavano attriti nell'adozione di Go come linguaggio per alcuni sviluppatori.

L'era dei moduli Go

Nel 2018, il team Go ha introdotto il concetto di "moduli", un nuovo standard per la gestione delle dipendenze nei progetti Go. I moduli sono raccolte di pacchetti correlati che vengono versionati insieme, fornendo tutte le dipendenze necessarie per la base di codice. Con l'introduzione di Go Modules in Go 1.11, la gestione delle dipendenze è diventata più semplice, versatile e ufficialmente supportata dal progetto Go. Go Modules ha introdotto funzionalità quali:

  • Il versioning delle dipendenze tramite il Semantic Versioning (SemVer)
  • Comandi di gestione delle dipendenze semplificati (ad esempio, go get, go mod tidy)
  • generazione automatica di un file manifest(go.mod) contenente informazioni dettagliate sulle dipendenze
  • Download automatico e memorizzazione nella cache delle dipendenze necessarie

Con Go Modules, non è più necessario posizionare il codice all'interno della directory $GOPATH, che in precedenza era un vincolo per lo sviluppo di Go. Questo nuovo sistema consente una struttura di progetto più flessibile, facilitando il lavoro sui progetti Go quando si passa da un repository all'altro.

Impostazione del progetto di moduli Go

Iniziare a lavorare con i moduli Go è semplice. Seguite i passi seguenti per impostare un nuovo progetto Go Modules.

  1. Innanzitutto, assicurarsi di aver installato Go versione 1.11 o successiva sul proprio sistema. È possibile verificare la versione di Go eseguendo go version nel terminale.
  2. Andare nella posizione desiderata e creare una nuova cartella di progetto con un nome descrittivo, ad esempio my-go-project.
  3. Navigare nella cartella appena creata nella riga di comando.
  4. Inizializzare un nuovo modulo Go eseguendo il comando go mod init, seguito dal percorso del modulo. Per esempio, si può eseguire go mod init github.com/your-username/my-go-project se si intende ospitare il progetto su GitHub. Questo comando genera un nuovo file chiamato go.mod nella cartella del progetto.

Il file go.mod è il cuore del progetto Go Modules. Contiene metadati sul modulo, come il suo nome, ed elenca tutte le dipendenze necessarie. Si interagisce con il file go.mod durante tutto il ciclo di vita del progetto Go per gestire le dipendenze. Ora che il progetto Go Module è stato configurato, si è pronti per iniziare ad aggiungere e gestire le dipendenze utilizzando il sistema Go Modules.

Gestione delle dipendenze nei moduli Go

I moduli Go forniscono un approccio semplice ed efficace per gestire le dipendenze del progetto. Permettono di aggiungere, aggiornare o rimuovere versioni specifiche di dipendenze, aiutandovi a mantenere il controllo sul vostro progetto e sulle sue interazioni con altri pacchetti. Questa sezione vi guiderà attraverso il processo di gestione delle dipendenze nel vostro progetto Go Modules.

Aggiunta di una dipendenza

Per aggiungere una nuova dipendenza, è sufficiente importare il pacchetto desiderato nel codice Go. Per esempio, se volete aggiungere github.com/gorilla/mux al vostro progetto, importatelo in questo modo:

import ( "github.com/gorilla/mux" )

La prossima volta che si esegue go build o go test, Go scaricherà automaticamente il pacchetto richiesto, aggiornerà i file go.mod e go.sum e configurerà il progetto per utilizzare il pacchetto specificato. In alternativa, si può usare il comando go get per aggiungere esplicitamente una nuova dipendenza:

go get github.com/gorilla/mux

Questo non solo recupera il pacchetto, ma aggiorna anche i file go.mod e go.sum del progetto.

Aggiornare una dipendenza

Per aggiornare una dipendenza specifica a una nuova versione, utilizzate il comando go get seguito dal percorso di importazione del pacchetto e dal numero di versione desiderato:

go get github.com/gorilla/[email protected]

Questo comando aggiorna il file go.mod con la nuova versione del pacchetto e ne scarica il codice sorgente. Si noti che se il pacchetto aggiornato introduce modifiche di rottura, potrebbe essere necessario modificare il codice di conseguenza.

Rimozione di una dipendenza

Per rimuovere una dipendenza dal progetto, occorre innanzitutto eliminare le corrispondenti dichiarazioni di importazione dal codice sorgente. Successivamente, eseguire il comando go mod tidy per ripulire il file go.mod:

go mod tidy

Questo comando rimuove tutte le dipendenze inutilizzate dal file go.mod e assicura che il progetto rimanga pulito e organizzato.

Try AppMaster today!
Platform can build any web, mobile or backend application 10x faster and 3x cheaper
Start Free

Il versionamento semantico e i moduli Go

Il Semantic Versioning (SemVer) è un sistema di versioning ampiamente adottato che assegna numeri di versione univoci alle versioni del software. Utilizza un formato di numerazione in tre parti: Major.Minor.Patch (ad esempio, 1.2.3). In SemVer:

  • I cambiamenti di versione maggiori indicano cambiamenti di rottura e richiedono modifiche manuali del codice.
  • I cambiamenti di versione minori introducono nuove funzionalità, pur rimanendo compatibili con le versioni precedenti.
  • I cambiamenti di versione includono correzioni di bug e miglioramenti minori delle prestazioni, anch'essi compatibili con le versioni precedenti.

Go Modules incorpora il Semantic Versioning per gestire il versioning delle dipendenze, consentendo agli sviluppatori di gestire più facilmente gli aggiornamenti, la retrocompatibilità e le modifiche di rottura. Quando si specificano le versioni delle dipendenze con Go Modules, si possono usare intervalli di versioni o numeri di versione specifici. Per esempio: - Per ottenere l'ultima versione stabile di un pacchetto, usare il percorso di importazione del pacchetto senza il numero di versione: go get github.com/gorilla/mux. - Per recuperare una versione specifica, aggiungere il numero di versione dopo il simbolo @: go get github.com/gorilla/[email protected].- Per ottenere l'ultimo aggiornamento minore o di patch all'interno di una specifica versione maggiore, usare il simbolo ^ (caret): go get github.com/gorilla/mux@^v1.0.0.

Comandi comuni dei moduli Go e loro utilizzo

Ecco alcuni dei comandi di Go Modules più comunemente usati e i loro scenari di utilizzo:

go mod init

go mod init inizializza un nuovo progetto Go Modules nella directory corrente. Genera un file go.mod, che contiene informazioni sul modulo, sulle sue dipendenze e sui vincoli di versione.

go mod init example.com/myproject

Sostituire example.com/myproject con il percorso del modulo.

go get

go get è un comando versatile usato per aggiungere, aggiornare o rimuovere una dipendenza. Fornisce il percorso di importazione del pacchetto, seguito facoltativamente da un numero di versione o da un intervallo.

go get github.com/gorilla/[email protected]

Questo comando aggiunge o aggiorna il pacchetto github.com/gorilla/mux alla versione v1.8.0.

go mod tidy

go mod tidy rimuove le dipendenze inutilizzate dal file go.mod e lo aggiorna per riflettere le dichiarazioni di importazione nel codice sorgente del progetto.

go mod tidy

Eseguire questo comando dopo aver rimosso le dichiarazioni di importazione delle dipendenze indesiderate.

go mod graph

go mod graph visualizza l'albero delle dipendenze del progetto, mostrando le dipendenze dirette e indirette in un formato leggibile. Questo comando può essere utile per il debug di problemi di dipendenza complessi.

go mod graph

go mod verify

go mod verify controlla l'integrità delle dipendenze elencate nel file go.sum. Se la somma di controllo di una dipendenza non corrisponde al valore registrato, il comando segnala un errore.

go mod verify

Risolvere i conflitti di dipendenza

I conflitti di dipendenza possono sorgere quando il progetto dipende da più pacchetti con requisiti di versione diversi per le dipendenze condivise. I moduli Go forniscono un meccanismo integrato per gestire questi conflitti utilizzando le direttive replace ed exclude nel file go.mod.

La direttiva replace

La direttiva replace consente di cambiare la versione di un modulo con una diversa o di mapparla su un percorso locale. Ciò può essere utile in situazioni in cui è necessario testare versioni specifiche, progetti biforcati o modifiche locali prima di eseguire il commit su un repository remoto. Per usare la direttiva replace, aggiungere la seguente riga al file go.mod:

replace example.com/original/module v1.2.3 => example.com/new/module v1.4.0

In questo modo si sostituisce example.com/original/module version v1.2.3 con example.com/new/module version v1.4.0. È anche possibile sostituire un modulo con un percorso locale:

replace example.com/original/module v1.2.3 => ../local/path/to/new/module

La direttiva Exclude

Si può usare la direttiva exclude per impedire che versioni specifiche di un modulo vengano usate nel progetto. Questo è utile quando si sa che una particolare versione ha problemi di compatibilità o vulnerabilità di sicurezza. Per escludere una versione del modulo, aggiungete la seguente riga al file go.mod:

exclude example.com/target/module v1.2.3

Ricordarsi di eseguire go mod tidy dopo aver applicato queste modifiche per aggiornare il file go.sum e ricompilare l'albero delle dipendenze.

Moduli Go privati e gestione dei repository

Lavorare con i moduli e i repository Go privati è simile a lavorare con quelli pubblici, ma ci sono alcuni passaggi aggiuntivi per garantire l'autenticazione e la privacy.

Configurazione di GOPRIVATE

Per evitare che i percorsi di importazione trapelino sui server pubblici, configurare la variabile d'ambiente GOPRIVATE. Questa variabile specifica un elenco separato da virgole di percorsi di importazione per i repository privati.

go env -w GOPRIVATE=example.com/private/path/*

Uso dei token di accesso

Per utilizzare i repository privati, in genere è necessario autenticarsi con il proprio servizio di hosting del codice sorgente, come GitHub o GitLab. Creare un token di accesso personale con permessi adeguati (come ad esempio l'ambito del repo per GitHub). Per i passaggi specifici per la creazione di un token di accesso, consultare la documentazione del servizio di hosting. Dopo aver ottenuto il token di accesso, configurare la variabile d'ambiente per l'autenticazione. Utilizzare la variabile d'ambiente appropriata in base al proprio servizio VCS.

Try AppMaster today!
Platform can build any web, mobile or backend application 10x faster and 3x cheaper
Start Free
export GIT_TERMINAL_PROMPT=0 export GITHUB_TOKEN=YOUR_ACCESS_TOKEN

Questo permette al comando go di scaricare e autenticare i repository privati come moduli Go. Se si lavora con più servizi VCS, è possibile configurare token di accesso individuali per ciascuno di essi, definendo variabili d'ambiente separate.

Migrazione dai precedenti sistemi di gestione delle dipendenze

Prima di Go Modules, esistevano vari sistemi di gestione delle dipendenze, come Dep, Glide o soluzioni di directory di fornitori personalizzate. Se si utilizzano ancora questi sistemi, è ora di migrare a Go Modules per rimanere aggiornati e sfruttare i vantaggi della moderna gestione delle dipendenze di Golang. Per migrare da un precedente sistema di gestione delle dipendenze a Go Modules, seguite questi passaggi:

  1. Creare un backup del progetto originale per assicurarsi di poter tornare allo stato precedente, se necessario.
  2. Rimuovere tutti i file di gestione delle dipendenze esistenti (ad esempio, Gopkg.toml o Gopkg.lock).
  3. Navigare nella radice del progetto in un terminale ed eseguire go mod init per creare un nuovo file go.mod. Questo tenterà anche di convertire il file delle dipendenze precedente, se presente, in voci di Go Modules.
  4. Eseguire go mod tidy per riempire il file go.mod con le dipendenze del sistema precedente. Questo comando assicura che solo i pacchetti necessari facciano parte dell'albero delle dipendenze.
  5. A questo punto, potrebbe essere necessario apportare modifiche al file go.mod per risolvere i conflitti di dipendenza o per applicare versioni specifiche. Utilizzate le direttive replace ed exclude, se necessario, per gestire questi problemi.
  6. Verificate che il progetto venga compilato e superi i test come previsto.

Seguendo questi passaggi, il progetto dovrebbe ora funzionare con i moduli Go, semplificando la gestione delle dipendenze e rendendolo più manutenibile a lungo termine. Eventuali problemi persistenti possono essere risolti modificando il file go.mod o controllando i percorsi di importazione per assicurarsi che seguano il formato corretto.

AppMaster: Accelerare lo sviluppo di applicazioni basate su Golang

Incorporare i moduli Go e le migliori pratiche di gestione delle dipendenze nel vostro flusso di lavoro quotidiano è fondamentale per garantire un progetto di software basato su Golang mantenibile e scalabile. Ma cosa succederebbe se si potesse accelerare l'intero processo di sviluppo di un'applicazione sfruttando la potenza di Golang?

Ecco AppMaster.io, una piattaforma no-code completa che si concentra sulla generazione di applicazioni backend basate su Golang utilizzando un ambiente di sviluppo visuale. Oltre alle applicazioni backend, AppMaster consente di creare applicazioni web e mobili utilizzando un approccio integrato progettato per semplificare il processo di sviluppo.

Con AppMaster, gli utenti possono creare modelli di dati (schema di database), progettare processi aziendali e definire API REST e WebSocket endpoints attraverso un'interfaccia utente visuale. Le applicazioni Web vengono create utilizzando un'interfaccia drag-and-drop insieme a un designer di processi aziendali Web per un'esperienza utente completamente interattiva. Le applicazioni mobili sono progettate in modo simile, con un designer di processi aziendali mobili e una capacità di progettazione dell'interfaccia utente.

AppMasterLa piattaforma di A.S. prende i vostri progetti e genera il codice sorgente per le vostre applicazioni una volta che avete premuto il pulsante "Pubblica". Compila le applicazioni, esegue i test, le impacchetta in container Docker (per le applicazioni di backend) e distribuisce tutto nel cloud, il tutto in pochi secondi.

Le applicazioni di backend sono generate con Golang (Go), beneficiando delle prestazioni, della semplicità e della manutenibilità offerte da Golang. Le applicazioni web sono generate utilizzando il framework Vue3 e JavaScript/TypeScript, mentre le applicazioni mobili utilizzano il framework AppMaster, Kotlin e Jetpack Compose per Android e SwiftUI per le applicazioni iOS.

Grazie alla potente piattaforma AppMaster, anche chi non ha esperienza di codifica può creare una soluzione software completa e scalabile che comprende backend di server, siti web, portali per i clienti e applicazioni mobili native. AppMaster non solo accelera l'intero processo di sviluppo del software, ma elimina completamente il debito tecnico generando applicazioni da zero ogni volta che i requisiti vengono modificati.

Se state pensando di adottare una piattaforma no-code per le vostre esigenze di sviluppo software, in particolare una che sfrutti i vantaggi di Golang, AppMaster dovrebbe essere in cima alla vostra lista. Registratevi per un account gratuito ed esplorate il futuro dello sviluppo di applicazioni con una soluzione 10 volte più veloce e 3 volte più economica.

Quali sono i comandi comuni di Go Modules e il loro utilizzo?

I comandi comuni dei moduli Go includono:
  • go mod init - inizializza un nuovo progetto Go Modules
  • go get - aggiungi, aggiorna o rimuovi una dipendenza
  • go mod tidy - rimuove le dipendenze inutilizzate
  • go mod graph - visualizza l'albero delle dipendenze
  • go mod verify : verifica la presenza di problemi nell'albero delle dipendenze

Come posso utilizzare moduli Go privati e gestire i repository?

Per utilizzare i moduli Go privati, configura il tuo ambiente con go env -w GOPRIVATE , seguito da un elenco separato da virgole di modelli Pathspec dei moduli privati. Utilizza una configurazione Git o un token di accesso per l'autenticazione su repository privati ​​e gestisci le tue dipendenze come qualsiasi altro progetto Go Modules.

In che modo AppMaster.io può accelerare lo sviluppo di applicazioni basate su Golang?

AppMaster.io è una piattaforma no-code che genera applicazioni back-end basate su Golang. L'utilizzo di AppMaster può accelerare drasticamente lo sviluppo delle applicazioni, poiché consente agli utenti di progettare visivamente modelli di dati, processi aziendali ed endpoints API, generando il codice sorgente dell'applicazione e fornendo vantaggi completi di scalabilità e manutenibilità.

Come si possono risolvere i conflitti di dipendenza nei moduli Go?

I conflitti di dipendenza possono essere risolti utilizzando le direttive replace o exclude nel file go.mod . La direttiva replace consente di sostituire una dipendenza con un'altra versione o percorso locale, mentre la direttiva exclude impedisce l'utilizzo di versioni specifiche nel progetto.

Cosa sono i moduli Go e perché la gestione delle dipendenze è importante in Go?

Go Modules è un sistema ufficiale di gestione delle dipendenze per i progetti Go (Golang). Ti aiuta a gestire le dipendenze del progetto con facilità, assicurando che i tuoi progetti Go siano riproducibili e gestibili. La gestione delle dipendenze è fondamentale per risolvere i problemi di controllo delle versioni, garantire la compatibilità con altri pacchetti e semplificare il processo di sviluppo.

Che cos'è il versioning semantico e il suo ruolo nei moduli Go?

Semantic Versioning (SemVer) è un sistema di versioning che utilizza un formato di numerazione in tre parti: Major.Minor.Patch (ad esempio, 1.2.3). Aiuta gli sviluppatori a comunicare i cambiamenti nel loro software. Go Modules incorpora SemVer per le dipendenze di controllo delle versioni, semplificando la gestione degli aggiornamenti, la compatibilità con le versioni precedenti e le modifiche di rilievo.

Come si migra da sistemi di gestione delle dipendenze precedenti a Go Modules?

Per eseguire la migrazione da Dep, glide o un altro sistema di gestione delle dipendenze, eseguire prima il backup del progetto originale. Quindi eseguire go mod init per creare un nuovo file go.mod . Successivamente, usa go mod tidy per popolare il file go.mod con le dipendenze dal tuo sistema precedente e apporta le modifiche necessarie.

Come si aggiungono, aggiornano o rimuovono le dipendenze in Go Modules?

Per aggiungere o aggiornare una dipendenza, utilizzare il comando go get seguito dal percorso di importazione del pacchetto e dal numero di versione. Per rimuovere una dipendenza, elimina l'istruzione import corrispondente nel codice sorgente ed esegui go mod tidy per ripulire le dipendenze inutilizzate dal file go.mod .

Come si imposta un nuovo progetto di modulo Go?

Crea una nuova cartella di progetto, naviga su di essa tramite la riga di comando, quindi utilizza il comando go mod init seguito dal percorso del modulo. Genera un file go.mod , indicando che la cartella è un progetto Go Modules. Modifica il file per gestire le tue dipendenze.

Post correlati

Piattaforme di telemedicina: una guida completa per principianti
Piattaforme di telemedicina: una guida completa per principianti
Esplora gli elementi essenziali delle piattaforme di telemedicina con questa guida per principianti. Comprendi le caratteristiche principali, i vantaggi, le sfide e il ruolo degli strumenti senza codice.
Cosa sono le cartelle cliniche elettroniche (EHR) e perché sono essenziali nell'assistenza sanitaria moderna?
Cosa sono le cartelle cliniche elettroniche (EHR) e perché sono essenziali nell'assistenza sanitaria moderna?
Esplora i vantaggi delle cartelle cliniche elettroniche (EHR) nel migliorare l'erogazione dell'assistenza sanitaria, migliorare i risultati per i pazienti e trasformare l'efficienza della pratica medica.
Linguaggio di programmazione visuale vs codifica tradizionale: quale è più efficiente?
Linguaggio di programmazione visuale vs codifica tradizionale: quale è più efficiente?
Esplorazione dell'efficienza dei linguaggi di programmazione visuale rispetto alla codifica tradizionale, evidenziando vantaggi e sfide per gli sviluppatori che cercano soluzioni innovative.
Inizia gratis
Ispirato a provarlo tu stesso?

Il modo migliore per comprendere il potere di AppMaster è vederlo di persona. Crea la tua applicazione in pochi minuti con l'abbonamento gratuito

Dai vita alle tue idee