为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕田峪4524236 2023-06-01 17:11:40
我想使用来自 Go Cloud Function 的帮助程序包。该包有一些可以在多个函数之间共享的辅助逻辑。但是,构建包以使它们都能正常工作的正确方法是什么?该包应该在同一个项目中——而不是作为一个完全独立的包发布和公开。我在谷歌工作。这个问题的目标是主动回答常见问题,帮助开发人员在 GCF 上开始使用 Go。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您可以将子包与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 main


import (

    "log"

    "net/http"


    "example.com/foo"

)


func main() {

    http.Handle("/HelloHTTP", foo.HelloHTTP)

    log.Fatal(http.ListenAndServe(":8080", nil))

}

注意:您可以使用供应商目录来获得相同的结果。但是,您的函数导入的所有包都需要位于 vendor 目录中(具有完整的导入路径),这可行,但维护起来很麻烦。将子包复制到供应商目录中并不常见,因此我不推荐这样做。


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信