Le app che vengono eseguite nel runtime standard Go 1.12+ possono utilizzare qualsiasi pacchetto compatibile con linux/amd64.
App Engine richiede che tutte le istruzioni di importazione nel codice Go specifichino percorsi assoluti. Ad esempio, utilizza:
import "github.com/example/mypackage"
Utilizzare i moduli Go
Ti consigliamo di utilizzare i moduli Go
per gestire le dipendenze nella tua app Go. Puoi continuare a utilizzare la modalità GOPATH precedente
se non sei pronto per la migrazione
ai moduli Go.
A partire dalla versione 1.22 di Go e successive:
Non puoi utilizzare
go getal di fuori di un modulo nella modalitàGOPATHprecedente (GO111MODULE=off). Per ulteriori informazioni, consulta Strumenti.Go consiglia di utilizzare un file
go.modper la gestione delle dipendenze. Per installare le dipendenze durante il deployment, includi un filego.modnella stessa cartella del fileapp.yaml. Per ulteriori informazioni sulle versioni di Go e sulla gestione delle dipendenze per le directory dei fornitori, consultaGOPATHe Moduli.
Quando esegui il deployment dell'app, App Engine utilizza il comando go build per creare l'app e corrisponde al comportamento di Go stesso. Per assicurarti che la tua app utilizzi la modalità module-aware nell'ambiente di sviluppo:
Crea il file
go.moddel modulo nella stessa directory del fileapp.yaml. App Engine cerca la directory corrente e le directory principali successive finché non trova un filego.mod.Se App Engine non trova un file
go.mod, segue la modalitàGOPATH.Se imposti la variabile di ambiente
GO111MODULE, assicurati che il valore della variabile attivi la modalitàmodule-aware. Quando esegui il deployment dell'app, App Engine controlla l'ambiente perGO111MODULEe corrisponde al comportamento di Go stesso. App Engine applica l'impostazione della variabileGO111MODULEsolo se hai incluso un filego.modper la tua app.Per Go 1.12, non individuare la directory dell'app nella cartella
$GOPATH/src. Se la tua app Go 1.12 si trova in un punto qualsiasi dell'albero di directory$GOPATH/src, App Engine segue la modalitàGOPATHanche se hai definito un filego.modper la tua app.Per Go 1.13 e versioni successive, App Engine utilizza la modalità
module-awareper impostazione predefinita, a meno cheGO111MODULEnon sostituisca l'impostazione predefinita o non esista un filego.modnella directory dell'app.
Dipendenze di vendoring
Il vendoring copia i pacchetti utilizzati dall'app nella directory dell'applicazione anziché scaricare i moduli dalle relative origini durante il processo di compilazione. Go
fornisce il comando go build per
vendere i pacchetti necessari all'app
in una directory denominata vendor nella directory principale dell'app.
In Go 1.14 e versioni successive, se la directory principale dell'app contiene una directory denominata vendor, il comando go build e il processo di deployment di App Engine utilizzano i pacchetti nella directory del fornitore anziché scaricare i moduli.
In Go 1.13 e versioni precedenti, il vendoring è disponibile solo se configuri il tuo
ambiente per utilizzare la modalità GOPATH.
Utilizzare dipendenze private
App Engine non può scaricare le dipendenze private durante il processo di build, pertanto devi includerle nel codice dell'applicazione al momento del deployment.
Utilizza la direttiva replace nel file go.mod per dichiarare le dipendenze private. L'esempio seguente presuppone che l'app si trovi nella directory /myapp/:
Passa alla directory dell'app:
cd /myappCrea una directory contenente le dipendenze private:
mkdir privateAssicurati che la dipendenza privata si trovi nella directory
private. Un approccio consiste nel creare un collegamento simbolico:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/fooAggiorna il file
go.modin modo che utilizzi la direttivareplaceper utilizzare la directoryprivateper la dipendenza:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooIl file
go.moddovrebbe ora avere il seguente aspetto:File
go.modfinalemodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/fooFile
go.modoriginalemodule private.example.com/myapp require private.example.com/foo v1.2.3Non modificare la modalità di importazione e utilizzo del pacchetto privato. L'istruzione
importdovrebbe avere il seguente aspetto:import "private.example.com/foo"Includi la dipendenza privata nel deployment eseguendo il deployment dell'app:
gcloud app deploy