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找到。
领取专属 10元无门槛券
私享最新 技术干货