什么是 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 从零开始创建了一个简单的微服务。
希望你和我一样喜欢本教程!