什么是 Go kit?

来自 Go kit README.md:

Go kit 是用于在 Go 中构建微服务的编程工具包。我们解决了分布式系统和应用程序体系结构中的常见问题,因此您可以专注于交付业务价值。
[...]
Go是一种很棒的通用语言,但是微服务需要一定量的专业支持。 RPC安全性,系统可观察性,基础结构集成甚至程序设计。Go kit 填补了标准库留下的空白,并使 Go 成为在任何组织中编写微服务的一流语言。

我们会做什么?

我们将创建一个非常基本的微服务,该微服务将返回并验证日期。目标是了解 Go kit 的工作原理,仅此而已。不用 Go kit 就能轻松复制所有逻辑,但我们是来这里学习 Go kit 的,所以...

希望这能对你的下一个项目有一个良好的开端!

我们的微服务将有一些端点。

/statusGET/getGET/validatePOSTdd/mm/yyyy

先决条件

您应该已经在计算机上安装并运行了 Golang。我发现在我的 Macbook 上 官方下载包 (我在配置环境变量时遇到一些问题) 安装的 Golang 比 Homebrew 安装 运行得更好。

struct

napodate 微服务

$GOPATHnapodate
service.go
context
在 Google,我们开发了一个上下文包,可轻松将跨 API 边界的请求范围的值,取消信号和截止日期传递给处理请求的所有协程

基本上,这是必需的,因为我们的微服务应该从一开始就处理并发请求,并且必须为每个请求提供上下文。

不要把事情搞混。本教程后面的内容将对此进行详细介绍。我们现在用的不多,但要习惯它! :P 现在我们有了微服务接口。

实现我们的服务

service.go
dateService
NewService()

让我们写一个测试

NewService()service_test.go

使测试更具可读性,但实际上应该使用 子测试,以获得最新的语法 来编写它们。

setup()NewService()

传输协议

service.gotransport.go
transport.go
statusRequestgetRequestvalidateRequestdate

响应也非常简单。

getstatus

最后但并非最不重要, 我们有用于响应输出的编码器,它是一个简单的 JSON 编码器:给定一个对象,我们将从中返回一个 JSON 对象。

以上就是传输协议,现在让我们去创建端点!

端点

endpoint.go
Get()Status()Validate()
Make...
Make...main.go

让我们来看一个例子:

这个方法允许我们以 Go 的方法来使用端点。

HTTP 服务器

我们的微服务需要一个 HTTP 服务器。Go 对此很有帮助, 但是我选择了 https://github.com/gorilla/mux 作为我们的路由,因为它的语法看起来非常简洁,所以让我们创建一个映射到我们端点的 HTTP 服务器。

server.go
main.gocommonMiddleware()

最后,我们的 main.go 文件

main.gocmd
main
8080

下面是我们服务器的设置:我们创建一个 Context(Context的说明见上面)),然后我们得到我们的服务。 同时也设置了一个错误通道.

通道(Channels)是连接并发 goroutine 的管道。您可以将值从一个 goroutine发送到通道,并使用另一个 goroutine 接收。
CTRL+C
handler := napodate.NewHTTPServer(ctx, endpoints)Make...
NewHTTPServer()

一旦通道收到错误消息,服务器将停止并死机。

让我们启动服务!

如果你正确的执行了前文的所有操作,请运行下面的命令

在你的项目文件夹目录下,你应该可以 curl 你的微服务了!

结束

我们使用 Go kit 从零开始创建了一个简单的微服务。

希望你和我一样喜欢本教程!