从零开始搭建一个简单实用的微服务模板

2022-04-24 04:33:46 +08:00
 Gota

最近总结了下平时工作中写的微服务, 抽出来一个比较简单直观的微服务项目启动模板. 如果对 Go 微服务选工具库或组织代码有所疑虑的话可以读读看, 限于篇幅这里就放个引言, 全篇可以点链接.


引言

微服务算是一个 Go 语言的主要应用场景, 与 Java 不同 Go 语言生态中并不存在一个像 Spring 那样具有绝对统治力的后端框架. 一般大家都是按照自己的业务需求, 组合一些工具库来实现微服务. 这次就带大家一起来实现一个简单实用的项目模板.

首先分享下我平常写微服务时常用的库:

  1. 日志: github.com/sirupsen/logrus
  2. 命令行: github.com/urfave/cli/v2
  3. 服务器: github.com/gofiber/fiber/v2
  4. HTTP 客户端: github.com/go-resty/resty/v2
  5. 参数校验: github.com/go-playground/validator/v10
  6. JWT: github.com/dgrijalva/jwt-go
  7. MySQL: github.com/go-sql-driver/mysql
  8. 错误处理: github.com/gota33/errors
  9. 初始化工具: github.com/gota33/initializr

这次的项目模板准备支持的特性:

  1. 命令行启动
  2. 优雅退出
  3. 配置仓库
  4. 访问日志
  5. JWT
  6. 结构化错误处理
  7. 请求校验

全篇: https://blog.igota.net/posts/20220422/

2804 次点击
所在节点    Go 编程语言
8 条回复
mengdodo
2022-04-24 08:50:53 +08:00
跟风贴一个

```
├── cmd # 执行目录
│ ├── api.go # Api 入口文件
│ ├── games.go # websocekt 单用户入口文件
│ ├── createRsaPem.go # 手动生成 rsa 非对称密钥
├── configs # 配置文件
│ ├── local.yaml # 本地环境
│ ├── dev.yaml # 测试环境
│ ├── pro.yaml # 正式环境
├── app
│ ├── api
│ │ ├── routes
│ │ │ ├── api
│ │ ├── controller
│ │ ├── model //数据结构体
│ │ ├── middleware
│ │ │ ├── responseJson.go //包裹响应数据为 json
│ │ │ ├── tokenAuth.go //token 验证中间件
│ │ ├── proto //protobuf
│ │ ├── utls //公共函数存放
│ ├── game # 游戏服务器( Nano server )
├── internal
│ ├── pkg # 项目基础包
│ │ ├── jwt # jwt 生成和验证函数库
│ │ ├── algoutil # 常用工具函数
│ │ │ ├── algoutil.go
│ │ ├── crypto # md5 rsa sha1 x509 base64 相关工具
│ │ │ ├── crypto.go
│ │ ├── errutil # 游戏服务器中错误码和错误信息统一管理
│ │ │ ├── code.go
│ │ │ ├── errutil.go
│ │ ├── whitelist # 白名单验证工具函数
│ │ │ ├── white_list.go
├── http.go # api 项目公用框架入口
├── websocket.go # websocket 项目公用框架入口

```
Dganzh
2022-04-24 14:23:42 +08:00
不错不错,学习学习
golangLover
2022-04-25 09:00:26 +08:00
学习了谢谢
twistedmeadows
2022-04-25 17:59:04 +08:00
学习了!先收藏!
sciel
2022-04-26 09:01:24 +08:00
怎么没有讲服务注册、发现、调用、限流、熔断呢。
Gota
2022-04-26 09:22:45 +08:00
@sciel 微服务治理其实是个挺大的话题,这里简单说两句。

在前 Kubernetes 时代确实需要在微服务代码中实现相关的治理功能,不过自从 Kubernetes 成为主流之后这就不再是一个必选项了,我们只要专心写业务代码,再搭配合适的 Ingress 实现就可以做到同样的效果。

考虑到每篇文章的正交性,这篇文章还是主要讲怎么组织业务代码,Part 2 中可能会提一下 Kubernetes 的部署配置,但也不会太深入,毕竟这个话题想讲明白估计得写一个系列了。
sciel
2022-04-26 11:32:04 +08:00
@Gota 期待你深入浅出的讲解,我觉得单个节点程序,很多常用的框架都可以使用。如果可以重点讲讲如何将节点组织起来,可能给大家的收获会更多。
FanZhen
2022-04-28 10:37:08 +08:00
学习学习~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX