论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Go-Zero微服务快速入门和最佳实践(一)
Go-Zero微服务快速入门和最佳实践(一)
大连全瓷种植牙齿制作中心
金牌会员
|
2024-5-18 14:57:51
|
显示全部楼层
|
阅读模式
楼主
主题
846
|
帖子
846
|
积分
2553
前言
并发编程和分布式微服务
是我们Gopher升职加薪的关键。
毕竟Go基础很容易搞定,不管你是否有编程经验,都可以比较快速的入门Go语言举行简单项目的开发。
虽说好上手,但是想和别人拉开差距,进步自己的竞争力,
搞懂分布式微服务和并发编程还是灰常重要的,这也是我今年更新文章的重点。
更文计划
我会更新一系列文章,陪你一起打怪升级,升职加薪!
本文的重点是:gozero快速入门,带你了解使用gozero开发项目的整体流程,以及一些本领。
下一篇的重点是:带你使用gozero从头至尾实现一个经典功能的开发。
后续文章还会陆续更新我们在商业项目开发中积累的项目经验,比如:如何自界说goctl进步效率;并发编程实战;devops入门和实战等等......
Go-Zero
我想和大家说一下安利gozero的原因:
Go-zero
在GitHub中已经有27.2K的star,集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。
官网
Go-Zero官方地点
一个神奇的事情,如果你直接在百度搜索gozero,前几页的检索结果竟然都没有gozero官网,而是各个技能社区作者的分享。
我发起你先认真学习Go-Zero官网资料,扫清知识盲点,然后再跟着我去实践。
本领 & 整体开发流程
为了吸引你继续读下去,我先分享本领吧:“
总结一句话:用好goctl开发就是快!
”
先说本领
goctl
能使用
goctl
的一定要用 goctl , goctl 是 go-zero 的内置脚手架,是提升开发效率的一大利器,可以一键生成代码、文档、摆设 k8s yaml、dockerfile 等。
gozero和go一样也强调
“少即是多”
的思想,
能用goctl生成的千万不要手写,不但开发速度慢;在团队开发中也难以保证同一的开发规范。
更重要的 goctl 支持我们自界说,后面我也会单独整理文章出来,和你分享如何结合你的项目,定制适合自己的goctl,进一步进步效率。
那详细goctl能生成什么呢?
api
grpc
MySQL
MongoDB
格式化
接口文档
还支持自界说
甚至还支持生成php、Android等代码
目录结构
先带你了解一下整体项目目录,这样你能更好的理解下文中的开发流程,这也是新手最头疼的地方,不知道从哪里动手开发。
app 全部的微服务目录
user
cmd
api api接口层 对外提供服务,可以用goctl生成
desc
xxx.api
etc
internal
main.go
rpc rpc层 内部服务 可以用goctl生成
etc
internal
pb
服务包名 由goctl生成
main.go
model model层 方便cmd目录中api和rpc调用
mqueue 等不同的服务
common 服务共享的常量、工具类等同一封装到这里
deploy 项目摆设配置等 比如Nginx配置
go.mod
欢迎关注我,下期内容会共享GitHub开源地点出来。
Go-Zero微服务项目开发流程
当你把go和gozero的开发环境安装好之后,发起按照下面的顺序举行开发:
首先设计数据库和数据表
使用工具老师成model
先开发api层
再开发rpc层
在api层注册rpc服务,调用rpc方法,对外提供接口
生成接口文档
以上是整体的开发流程,请你按照这个顺序开发,会非常清晰。
详解
1)首先设计数据库和数据表
微服务举行服务拆分一个最好理解而且最根本的原则就是
:每个服务对应一个单独的数据库。做到服务与服务之间的解耦,划清边界。
这就要求我们明确项目(服务)需求之后,做好表结构设计。
3.** 我们后续项目中用到的model、proto、甚至api层的结构体都可以通过工具根据数据库生成,所以数据库的设计至关重要!**
2)使用工具老师成model
使用goctl中的model下令生成即可:
官网有讲,不再赘述:mysql 代码生成
为了进一步进步效率,我们对此举行了封装,方便我们更快更好的生成model,你也可以按照我们的方式来:
在项目根目录下创建了script目录,专门用于封装各种常用的脚本
在script目录下,我们创建了genModel目录,用于生成model文件。
封装genModel.sh脚本,内容如下:
#!/usr/bin/env bash
# 使用方法:
# ./genModel.sh 数据库名 表名称
# 比如:
# ./genModel.sh lottery lottery
# 再将./genModel下的生成的文件剪切到对应服务的model目录中即可
#生成的表名
tables=$2
#表生成的genmodel目录
modeldir=./genModel
# 数据库配置
host=127.0.0.1
port=3306
dbname=$1
username=root
passwd=xxxxx
echo "开始创建库:$dbname 的表:$2"
goctl model mysql datasource -url="${username}:${passwd}@tcp(${host}:${port})/${dbname}" -table="${tables}" -dir="${modeldir}" -cache=true --home="${template}" --style=goZero
复制代码
这样,我们就可以很方便的使用./genModel.sh生成model,而不是需要拼接冗长的goctl下令
这个思路也同样适用你使用goctl生成其他的代码。
3)先开发api层
先界说xxx.api文件,可以参考
api demo 代码生成
使用goctl生成代码:goctl api go -api main.api -dir ../ --style=goZero
配置生成代码中的config目录以及yaml文件,弄清它们两者之间的联系
配置生成代码svc目录中的文件(比如jwt之类的中间件)
4)再开发rpc层
再告诉你一个提效利器
sql2pb
,这个工具适合我们开发新服务时使用。见名之意,也就是可以把sql转成pb文件
注意:
一旦我们的xx.proto文件有自界说修改之后,就不发起使用sql2pb了。如果不使用sql2pb的话,就直接修改xxx.proto文件
使用goctl生成pb.go文件:goctl rpc protoc lottery.proto --go_out=../ --go-grpc_out=../ --zrpc_out=../ --style=goZero
配置svc,注册model
编写logic,调用model,
写业务代码
5)在api层注册rpc服务,调用rpc方法
api层配置svc,注册rpc客户端
调用rpc方法
返回restful api
6)生成接口文档
注意:固然goctl不直接支持生成swagger,但是goctl的插件支持。-
goctl-swagger
通过 api 文件生成 swagger 文档
安装好goctl-swagger插件之后,我们就可以在api层的xxx.api同级目录下生成swagger了
参考下令如下:此中main.api是我在api层的desc目录中界说的,我们也在同级目录执行goctl下令即可:
goctl api plugin -plugin goctl-swagger="swagger -filename main.json" -api main.api -dir .
执行之后,就会出现如下图所示的main.json,这就是swagger文件
你可以直接使用swagger举行测试,也可以导入到其他工具中,比如我习惯导入到Apifox中,可以自动生成参数,方便我们举行测试:
总结
这篇文章带你梳理了使用gozero开发微服务项目的步调和本领,请你按我发起的方式开发和debug,会很清晰。
下一篇文章将通过一个完备的功能,带你跑通一个微服务的开发,包括:
需求分析+表结构设计+api+rpc+goctl+apifox调试+细节处置惩罚。
如果你对Go语言大概微服务感兴趣,欢迎关注我的公众号:王中阳Go,也欢迎直接私信我。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
大连全瓷种植牙齿制作中心
金牌会员
这个人很懒什么都没写!
楼主热帖
初识C语言
记一次 .NET 某汽贸店 CPU 爆高分析 ...
浅入浅出 1.7和1.8的 HashMap
Net core中使用System.Drawing对上传的 ...
前后端分离项目(八):后端报错Field ...
java学习第二天
Python爬虫之基于selenium实现12306模 ...
业务安全发展的三个阶段
7.1 实现进程内存块枚举
Docker三种自定义网络(bridge、macvla ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表