Go语言中的云函数

Go语言(Golang)是谷歌2009年推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:“我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。”

除比特币是由C++开发以外,目前最主流坊的客户端均有go语言开发,足以可见Go语言在整个区块链行业的地位。

Go中的云函数

它来了! Go现在是Google Cloud Functions官方支持的语言。 再见node.js ...至少对我来说。

让我们快速使用快捷功能,使用一些共享代码输出一些JSON。

该项目的所有代码均为https://github.com/theyakka/go-func-example。

代码

我们先创建目录架构。需要两个文件夹:一个用于我们的公共代码(common),一个用于我们的函数代码(functions)。整体架构如下所示:

为了让我们的函数能够查看/使用公共代码,我们将使用go 1.11中添加的模块功能创建一个本地模块。 因此,在common和functions文件夹下,我们首先创建几个ofgo.mod文件。

简单起见,我们将使用模块名称mysite.com/myfunctions作为我们所有代码的基本标识符。因此,common / go.mod文件的内容应该是module mysite.com/myfunctions/common,就是这样。

函数go.mod有点复杂。 它是这样的:

这里马上就会发生故障。 使用版本号v0.0.0告诉Go我们将在VCS系统之外工作,所以它不应该尝试点击mysite.com/myfunctions/common来检查最新版本并下载。 但是,我们仍然需要告诉Go在哪里找到它,这就是我们用replace(替换)行实现的。 replace告诉Go它应该转到公共代码的公共文件夹。 有点冗长,但有效。

接下来,让我们设置我们的第一个函数入口点。 在functions文件夹下,创建一个名为message_func.go的文件。 现在我们需要添加一个函数处理程序。我们称之为OuputMessage:

现在,仅仅为了从我们的函数中访问一些公共代码的示例,让我们添加一个帮助器struct(结构),我们可以将消息传递给它,它生成并将JSON响应写入我们的ResponseWriter。

在公共模块下的名为writers的文件夹中创建名为json_message_writer.go的文件。 现在,让我们添加一些快速而混乱的代码来生成和编写JSON。 该文件应如下所示:

我们在这里所做的只是简单地获取在创建时传递给JSONMessageWriter的字符串值,将其包装在一个简单的响应结构中,并将映射编码为JSON字符串。 很简单。

所以,现在我们可以更新我们的原始函数以使用消息编写器。

为了使它更具动态性,我们将从查询字符串值(称为消息)中拉出我们要显示的消息,并将其传递给我们的JSONMessageWriter。 如果出现错误,我们将返回500状态代码并将错误打印到控制台/日志并将其作为纯文本写入ResponseWriter。 我们显然也希望把它变成JSON,但是,就目前而言,我们不打算解决这个问题。

应该为目前的代码做到这一点。让我们快速测试一下,然后进行部署。

本地测试

为了在本地测试我们的函数,我们可以使用测试(无论如何我们都应该编写的测试)。 我们设置一个快速测试来测试函数是否正确执行(返回状态代码200)并匹配JSONMessageWriter生成的JSON

从您选择的IDE或使用命令行(在函数目录中)运行测试:

你应该会看到像这样的通行证:

这意味着我们现在可以继续部署!

部署

我不会详细介绍有关设置gcloud命令行工具,链接到你的项目,授权等的所有说明。点击“这里”会有详细说明。所以,我会假设你做好了一杯咖啡(或者开了一杯冰镇啤酒)并且已经完成了这些步骤。

在你快速尝试部署你的函数之前,我们需要快速做一件事。需要告诉gcloud工具忽略我们的go.mod和go.sum文件,因为我们将使用模块vendelling函数来连接我们的模块。

为此,我们首先在functions目录下创建一个名为.gcloudignore的文件,其中包含以下内容:

就是这样。它现在会在尝试部署我们的应用程序时忽略这些文件。好的,正如我刚才提到的,我们还需要供应我们的应用程序。为此,我们运行:

这会将我们的公共模块引入我们的函数模块(在新的供应商目录下)。在尝试解析导入时,Go会默认查看供应商目录,因此我们必须都在状态。

我们现在可以部署我们的函数!

运行:

此命令将OutputMessage函数作为HTTP函数部署到当前项目,并告诉它我们要使用Go 1.11的运行时。部署它需要10-60秒(特别是第一次),但之后您将在控制台中看到有关部署的大量信息。打印出的值中会有httpsTrigger。这将是您新的云函数的URL。我们点击那个网址。

打开浏览器窗口/选项卡并输入带有查询字符串?message = Hello World的httpsTrigger URL附加到URL的末尾。您应该看到以下JSON输出:

如果一切顺利,您现在可以使用Go 1.11在Google Cloud Functions上运行了!

如果您有任何问题,请尝试回顾您的步骤并查看文档,因为您可能漏掉了某个配置步骤。

祝您好运,也希望您编写顺利!

作为便捷方式,所有代码都可以在https://github.com/theyakka/go-func-example找到。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190124G1013Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券