Le app che vengono eseguite nel runtime standard di Go 1.11 possono utilizzare qualsiasi pacchetto compatibile con linux/amd64.
Utilizzo dei moduli Go
Ti consigliamo di utilizzare i moduli Go per gestire le dipendenze nella tua app Go, ma puoi continuare a utilizzare la modalità GOPATH precedente se non è ancora il momento di eseguire la migrazione ai moduli Go.
Quando esegui il deployment dell'app, App Engine utilizza il comando go build per compilarla e quindi corrisponde al comportamento di Go stesso. Per assicurarti che la tua app utilizzi la modalità consapevole dei moduli, svolgi i seguenti passaggi nell'ambiente di sviluppo:
Crea il file
go.moddel modulo nella stessa directory del fileapp.yaml. App Engine cerca nella directory corrente e poi nelle 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à consapevole dei moduli. Quando esegui il deployment dell'app, App Engine controlla se nel tuo ambiente è presenteGO111MODULEe ne associa il comportamento a quello di Go. App Engine applica l'impostazione della variabileGO111MODULEsolo se hai incluso un filego.modper la tua app.
- Non posizionare la directory dell'app in
$GOPATH/srco al di sotto. Se la tua app si trova in qualsiasi punto della struttura ad albero della directory$GOPATH/src, App Engine segue la modalità GOPATH anche se hai definito un filego.modper la tua app.
Utilizzo di dipendenze private
App Engine non può scaricare le dipendenze private durante il processo di compilazione, pertanto devi includerle nel codice dell'applicazione al momento del deployment.
Per dichiarare le dipendenze private, dovrai utilizzare l'istruzione replace nel file go.mod. Nell'esempio seguente si 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 sia nella directory
private. Un approccio è creare un link simbolico:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/fooAggiorna il file
go.modin modo da utilizzare la direttivareplaceper utilizzare la directoryprivateper la dipendenza:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooIl file
go.moddovrebbe 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 il modo in cui importi e utilizzi il pacchetto privato. L'istruzione
importdovrebbe avere il seguente aspetto:import "private.example.com/foo"Includi la dipendenza privata nel deployment dell'app:
gcloud app deploy