Go-Kit实现莫斯电码转换
本文通过一个简单的服务器案例,说明go-kit微服务工具集的基本使用方式。
我们的需求是实现一个可以将英文和莫斯电码相互转换的api服务,举例,我们希望通过建立一个api服务,将 ”Hello World“ 翻译为 ”… . .-… .-… — .-- — .-. .-… -…“。
项目地址:https://github.com/xuezhaojun/gomorse_gui
Overview
Go-kit架构具有三个抽象分层,分别是:
- 传输层
- 服务层
- EndPoint层
然后概览一下项目结构:
--gomorse_gui
--pkg
-- object_model
-- interfaces.go
-- morse
-- morse_translater.go
--svc
-- morse_service
-- endpoint.go
-- transport.go
-- main.go
主要go文件有四个:
- interfaces.go
- morse_translater.go
- main.go
- transport.go
接下来,我们将分别介绍三个层以及其对应的代码。
服务层
业务逻辑实现在服务层里,而在服务层的代码只需要关心业务逻辑即可。
pkg/object_model目录下的interfaces.go,主要作用以接口的形式,定义业务目标:
type Morse interface {
TranslateEnglishToMorseCode(request Request) (Response, error)
TranslateMorseCodeToEnglish(request Request) (Response, error)
}
简明来说,我们的这个需要实现两个目标:
- 将English翻译为MorseCode
- 将MorseCode翻译为English
pkg/morse目录下的morse_translater.go, 则是该接口的具体实现:
type MorseTranslater struct{
}
func NewMorseTranlater() *MorseTranslater {
return &MorseTranslater{
}
}
func (m *MorseTranslater) TranslateEnglishToMorseCode(request object_model.Request) (response object_model.Response, err error) {
if err := gomorse.Valid(request.Text); err !=