猿问

我如何在 Google Cloud Functions 上使用带有 Go 的子包?

我想使用来自 Go Cloud Function 的帮助程序包。该包有一些可以在多个函数之间共享的辅助逻辑。但是,构建包以使它们都能正常工作的正确方法是什么?该包应该在同一个项目中——而不是作为一个完全独立的包发布和公开。

我在谷歌工作。这个问题的目标是主动回答常见问题,帮助开发人员在 GCF 上开始使用 Go。


慕田峪4524236
浏览 90回答 1
1回答

千巷猫影

您可以将子包与Go 模块一起使用。Go 模块是 Go 的新依赖管理解决方案——它们让你在外部工作,GOPATH并让你管理你拥有的每个依赖的确切版本。模块还允许您定义一组具有相同导入路径前缀的 Go 包。当您编写函数时,这使您可以在模块中导入其他包。您正在部署的功能需要位于模块的根目录。这是一个示例文件结构以及如何导入包:.├── cmd│   └── main.go # Useful for testing. Can import and setup your function.├── function.go # Can import example.com/foo/helperpackage├── function_test.go├── go.mod # module example.com/foo└── helperpackage    └── helper.go此设置在 中具有您的功能function.go并由 测试function_test.go。它们位于名为example.com/foo. helperpackage可以通过function.go使用导入example.com/foo/helperpackage。这也有一个cmd目录,这可能有助于本地测试。您可以导入example.com/foo并启动将您的函数注册为 HTTP 处理程序的 HTTP 服务器。例如:package mainimport (    "log"    "net/http"    "example.com/foo")func main() {    http.Handle("/HelloHTTP", foo.HelloHTTP)    log.Fatal(http.ListenAndServe(":8080", nil))}注意:您可以使用供应商目录来获得相同的结果。但是,您的函数导入的所有包都需要位于 vendor 目录中(具有完整的导入路径),这可行,但维护起来很麻烦。将子包复制到供应商目录中并不常见,因此我不推荐这样做。
随时随地看视频慕课网APP

相关分类

Go
我要回答