I am trying to deploy a Google Cloud Function in Go, but got an error while deploying because I use, at the same time, subpackages and "internal modules" (only defined on my host, not deployed anywhere). I have the following structure :
.
├── function
│ ├── package1
│ │ └── file1.go
│ ├── function.go
│ ├── go.mod
│ └── go.sum
└── common
├── common.go
├── go.mod
└── go.sum
Contents of my function.go
(entrypoint of my Cloud Function) :
package function
import (
"github.com/.../function/package1"
"github.com/.../common"
)
// use functions from package1 and common
Topics have been covered individually here :
- Error when trying to deploy Google cloud function in Go 1.11 using go modules
- How can I use a sub-packages with Go on Google Cloud Functions?
The first post indicates to use vendoring and exclude go.mod
and go.sum
from the source to be able to use common
module, while the 2nd indicates to include go.mod
and go.sum
without vendoring to be able to use subpackages.
But I am wondering : is it possible to use both at the same time? Or vendoring dependencies requires to put all .go
source files in the same directory (no subpackages)? Likewise, using subpackages requires to not use vendoring? How can I structure my code to avoid those restrictions, or what can I do (deploy common
module somewhere, ...)?
Also, the documentation on "Specifying dependencies" for Go Cloud Functions states that :
Cloud Functions in Go must provide all of their dependencies via either Go modules with a go.mod file, or a vendor directory. Your function cannot specify dependencies using both Go modules and a vendor directory at the same time.