Especifica dependencias en Go
Cloud Functions en Go debe proporcionar todas sus dependencias a través de los módulos de Go con un archivo go.mod
o un directorio vendor
. Tu función no puede especificar dependencias mediante módulos de Go y un directorio vendor
al mismo tiempo.
El entorno de ejecución de Go incluye una cantidad de paquetes de sistema. Si tu función usa una dependencia que requiere un paquete de sistema que no está en la lista, puedes solicitar un paquete.
El contenido de este documento se aplica para Go 1.11 y Go 1.13.
Usa módulos de Go
Cloud Functions admite la funcionalidad experimental de módulos de Go, que te permite especificar dependencias en un archivo go.mod
en la raíz de tu proyecto. Cuando implementas la función, las dependencias especificadas en el archivo go.mod
se recuperarán y compilarán automáticamente.
El comportamiento de los módulos de Go difiere dependiendo de si desarrollas funciones dentro o fuera de GOPATH
. Si deseas determinar si te encuentras dentro de GOPATH
, sigue estos pasos:
Navega al directorio de tu proyecto.
Encuentra tu
GOPATH
mediante la ejecución del comando:go env GOPATH
Este da como resultado una línea similar a la siguiente:
GOPATH=YOUR_GOPATH
Encuentra tu directorio de trabajo actual con solo ejecutar lo siguiente:
pwd
Si tu directorio de trabajo comienza con YOUR_GOPATH
, estás dentro de GOPATH
. En ese caso, genera tu archivo go.mod
ejecutando los tres comandos siguientes:
export GO111MODULE=on go mod init go mod tidy
Si tu directorio de trabajo no comienza con YOUR_GOPATH
, estás fuera de GOPATH
. En ese caso, genera tu archivo go.mod
ejecutando los siguientes comandos:
go mod init MODULE go mod tidy
En el ejemplo anterior, MODULE
es el nombre de tu módulo.
Por ejemplo, el nombre de tu módulo podría ser example.com/myproject
(ten en cuenta que el nombre de dominio es obligatorio). El comando go
detecta automáticamente el nombre del módulo cuando estás dentro de GOPATH
.
Después de crear un archivo go.mod
, puedes usar el comando go get
para obtener dependencias y agregarlas automáticamente a tu proyecto. Por ejemplo:
go get DEPENDENCY
En el ejemplo anterior, DEPENDENCY
es una dependencia que te recomendamos agregar a tu función. Por ejemplo, el comando go get cloud.google.com/go/storage
agrega la biblioteca cliente de Cloud Storage a tu función.
Usa un directorio vendor
Cloud Functions también te permite incluir dependencias mediante un directorio vendor
. La mayoría de las veces, los directorios vendor
se mantienen con un administrador de dependencias.
Puedes usar cualquier administrador de dependencias que prefieras. Por ejemplo, puedes utilizar la funcionalidad de los módulos de Go para crear un directorio vendor
desde tu archivo go.mod
.
Usar un directorio vendor
es útil si tu dependencia no está disponible a través de un administrador de dependencias o si el acceso a Internet del entorno de Cloud Functions está restringido.
Una vez que hayas configurado el directorio vendor
, es posible que tengas que realizar pasos adicionales para asegurarte de que se respete su contenido, según la versión de Go que uses:
Go 1.16 o una versión posterior
Si usas Go 1.16 o una versión posterior, puedes dejar el directorio vendor
tal como está. Cuando el módulo principal contiene un directorio vendor
de nivel superior y su archivo go.mod
especifica Go 1.16 o una versión posterior, el comando go
se establece de forma predeterminada en -mod=vendor
para las operaciones que aceptan esa marca.
Versión de Go anterior a la 1.16
Si usas una versión de Go anterior a la 1.16, debes hacer lo siguiente para que se respete el contenido del directorio vendor
:
En las versiones de Go anteriores a la 1.16, si tienes un archivo go.mod
y un directorio vendor
, el directorio vendor
se ignorará cuando implementes tu función.
Puedes usar un archivo .gcloudignore
para evitar subir tus archivos go.mod
y go.sum
:
Crea un archivo
.gcloudignore
en la raíz del directorio de tu proyecto con el siguiente contenido:go.mod go.sum # Also ignore Git directories. Delete the following two lines if you want to # upload them. .git .gitignore
Para crear un directorio
vendor
con el contenido de tu archivogo.mod
, ejecuta el siguiente comando:go mod vendor
Cuando usas Google Cloud CLI para implementar tu función, puedes .gcloudignore
a fin de asegurarte de que go.mod
no se suba.
Usa dependencias privadas
Si las dependencias de tu función están alojadas en un repositorio al que no se puede acceder públicamente, debes usar un directorio vendor
para obtener las dependencias antes de implementar la función. Si planeas usar un archivo go.mod
, consulta las instrucciones anteriores para evitar posibles conflictos entre el archivo go.mod
y el directorio vendor
.