用go-zero 写一个数据中台系统

最近发现golang社区里出了一个新星的微服务框架,来自好未来,光看这个名字,就很有奔头,之前,也只是玩过go-micro,其实真正的还没有在项目中运用过,只是觉得 微服务,grpc 这些很高大尚,还没有在项目中,真正的玩过,我看了一下官方提供的工具真的很好用,只需要定义好,舒适文件jia结构 都生成了,只需要关心业务,

加上最近 有个投票的活动,加上最近这几年中台也比较火,所以决定玩一下,

先聊聊中台架构思路吧,look 先看架构图

中台的概念大概就是把一个一个的app 统一起来,反正我是这样理解的

先聊用户服务吧,现在一个公司有很多的公众号,小程序,微信的,支付宝的,还有xxx xxx ,很多的平台,每次开发的时候,我们总是需要做用户登陆的服务,不停的复制代码,然后我们就在思考能不能有一套独立的用户服务,

只需要告诉我你需要传个你要登陆的平台(比如微信),微信登陆,需要的是客户端返回给服务端一个code ,然后服务端拿着这个code去微信获取用户信息,反正大家都明白,

我们决定,将所有的信息 弄到 配置公共服务中去,里面在存,微信,支付宝,以及其它平台的 appid ,appkey,还有支付的appid,appkey,

这样就写一套

--------------------------------------------------------------------------------------------

go-zerio:  https://github.com/tal-tech/go-zero

最后说说实现吧,整个就一个repo 

网关,我们用的是: go-zero的Api服务

其它它的是服务,我们就是用的go-zero的rpc服务

看下目录结构

整个项目完成,我一个人操刀, 写了1个来星期,我就实现了上面的中台系统;

最后说说遇到的坑吧:

grpc 本人第一次用,然后就遇到了,有些字符为空时,字段值不显示的问题:

通过grpc官方库中的jsonpb来实现,官方在它的设定中有一个结构体用来实现protoc buffer转换为JSON结构,并可以根据字段来配置转换的要求

跨域问题:

go-zero的设置了,感觉没有效果,大佬说通过nginx 设置,后面发现还是不行,最近 ,强行弄到了一个域名下,后面有时间再解决

go-zero的sqlx 问题,这个真的费了很长的时间,

time.Time 这个数据结构,数据库中用的是 timestamp 这个 比如我的字段 是delete_at 默认数库设置的是null ,结果插入的时候,
就报了Incorrect datetime value: '0000-00-00' for column 'deleted_at' at row 1"}这个错,
查询的时候报deleted_at": unsupported Scan, storing driver.Value type u003cnilu003e into type *time.Time"
后面果断去掉了这个字段
字段上面加上 .omitempty 这个标签,好像也有用,`db:".omitempty"`

其次就是这个  Conversion from collation utf8_general_ci into utf8mb4_unicode_ci,这个导致的大概原因是,现在都喜欢用emj表情了,mysql数据识别不了

最后发现是数据连接问题:

mysql这边照样按照原始的方式,将配置文件修改编码格式
重新创建数据库,并且设置数据库编码为utf8mb4 ,排序规则为utf8mb4_unicode_ci
(这样的话,所有的表还有string字段都是这个编码格式,如果不想所有的都是,可以单独设置,这个不是重点.因为在navicat上都好设置,手动点一下就行了)
重点来了:golang中使用的是 github.com/go-sql-driver/mysql驱动,
将连接mysql的dsn:(因为我这使用的是gorm,所以dsn可能跟原生的格式不太一样,不过没关系,只需要关注charset和collation就行了)
root:password@/name?parseTime=True&loc=Local&charset=utf8
修改为:
root:password@/name?parseTime=True&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci

---------------------------------

mark

原文地址:https://www.cnblogs.com/jackluo/p/14107817.html