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 con ambos 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:

  1. Navega al directorio de tu proyecto.

  2. 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
        
  3. 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, ejecuta los siguientes tres comandos para generar tu archivo go.mod:

    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, ejecuta los siguientes comandos para generar tu archivo go.mod:

    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 recuperar 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.

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, en cuyo caso se respetará el contenido de tu directorio vendor:

  1. 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
        
  2. Para crear un directorio vendor con el contenido de tu archivo go.mod, ejecuta el siguiente comando:

        go mod vendor
        

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 recuperar las dependencias antes de implementar la función. Si planeas usar un archivo go.mod, consulta las instrucciones anteriores para evitar conflictos entre el archivo go.mod y el directorio vendor.